目录
1. Main_frm.cs:窗体文件。主界面,用户指定两个待比较的xml文件,选择待比较的属性。
2.Export.cs :窗体文件。导出界面,用于指定保存比较结果的Excel路径,显示导出进度,以及结束按钮。
3. readXmlToDt.cs:类文件。用于将xml文件读到一个dataTable中。
4.compareDt.cs:类文件。在两个dataTable所有列名相同的情况下,比较相同ID行的属性值是否相同。
5. exportDtToExcel.cs:类文件。将dataTable输出到Excel文件中。
6.colorExcel.cs:类文件。用C#在Excel文件中创建宏(VB),应用此宏来标识特定条件的文本。
组成文件
1. Main_frm.cs:窗体文件。主界面,用户指定两个待比较的xml文件,选择待比较的属性。
2.Export.cs :窗体文件。导出界面,用于指定保存比较结果的Excel路径,显示导出进度,以及结束按钮。
3. readXmlToDt.cs:类文件。用于将xml文件读到一个dataTable中。
思路:递归读取xml文件的所有叶子节点,将其存入一个泛型List<XmlNode>中。
应用知识点 泛型的应用 , XML介绍及基本操作
//创建类型表存放叶子节点
List<XmlNode> leafNodes = new List<XmlNode>();
//读取xml文档的叶子节点到一个List<XmlNode>中
public DataTable read_forList(string path)
{
//创建xml文档
XmlDocument xml = new XmlDocument();
//加载要读取的xml文件
xml.Load(path);
//获取文档中的根节点
XmlElement root = xml.DocumentElement;
recnode(root);
DataTable dt = new DataTable();
dt = listToTable(leafNodes);
return dt;
}
//递归读子节点
public void recnode(XmlNode node)
{
if (node.HasChildNodes)
{//如果有子节点
XmlNodeList children = node.ChildNodes;
foreach (XmlNode child in children)
{
recnode(child);
}
}
else
{//如果没有子节点
string node_str = node.ToString();
if (node.Attributes != null && node.Attributes.Count != 0)
{//若节点有属性,则为需要的叶子节点,装入到List中
leafNodes.Add(node);
}
}
}
思路:新建一个空数据表dataTable,将List<XmlNode>里的内容存入其中。
应用知识点 dataTable的详细用法
//创建一个新DataTable
public DataTable buildDataTable()
{//设定一些列名
DataTable temTable = new DataTable();
temTable.Columns.Add(new DataColumn("ID", typeof(String)));
temTable.Columns.Add(new DataColumn("NAME", typeof(String)));
temTable.Columns.Add(new DataColumn("attr1", typeof(String)));
temTable.Columns.Add(new DataColumn("attr2", typeof(String)));
temTable.Columns.Add(new DataColumn("attr3", typeof(String)));
temTable.Columns.Add(new DataColumn("attr4", typeof(String)));
temTable.Columns.Add(new DataColumn("attr5