C#怎样比较两个xml里节点内容的不同(升级用) 遍历比较 file节点的name相同的 Ldate的值 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 遍历比较xml GetXmlData(){ ArrayList headersubList = new ArrayList(); //获取当前XML文档的根 一级 XmlNode oNode = m_oDom.DocumentElement; //获取根节点的所有子节点列表 XmlNodeList oList = oNode.ChildNodes; //标记当前节点 XmlNode oCurrentNode; //遍历所有二级节点 for (int i = 0; i < oList.Count; i++) { //二级 oCurrentNode = oList[i]; //检测当前节点的名称,节点的值是否与已知匹配 if (oCurrentNode.Name.ToLower().Equals("store")) { //检测是否有子节点 三级 if (oCurrentNode.HasChildNodes) { Console.WriteLine(oCurrentNode.ChildNodes.Count); //遍历当前节点的所有子节点 for (int n = 0; n < oCurrentNode.ChildNodes.Count; n++) { //检测当前节点的子节点名称是否与已知匹配 if (oCurrentNode.ChildNodes[n].Name.ToLower() == "sale") { //获取该节点所有属性,以供查询 XmlNamedNodeMap oMap = oCurrentNode.ChildNodes[n].Attributes; Hashtable headItem = new Hashtable(); headItem.Add("Id", oCurrentNode.Attributes.GetNamedItem("Id").Value); headItem.Add("Name", oCurrentNode.Attributes.GetNamedItem("Name").Value); headItem.Add("OrderNo", oMap.GetNamedItem("OrderNo").Value); headItem.Add("Qty", oMap.GetNamedItem("Qty").Value); headersubList.Add(headItem); Console.WriteLine(oCurrentNode.Attributes.GetNamedItem("Id").Value); Console.WriteLine(oCurrentNode.Attributes.GetNamedItem("Name").Value); Console.WriteLine(oMap.GetNamedItem("OrderNo").Value); Console.WriteLine(oMap.GetNamedItem("Qty").Value); Console.ReadLine(); } } } } } } 楼上的貌似比较麻烦,这里和大家分享一个好东西,用这个搞定了://比较两个xml文件的差异返回差异的列表//定义了一个DllFile类来辅助,然后再根据差异的Lisst<DllFile>来生成一个对比后有差异的xml文件. public List<DllFile> GetModiflyList<T>(List<DllFile> newModel, List<DllFile> oldModel) { List<DllFile> list = new List<DllFile>(); foreach (DllFile newMod in newModel) { bool IsExist = false; foreach (DllFile oldMol in oldModel) { //取得老实体对象的属性集合 PropertyInfo[] pi = oldMol.GetType().GetProperties(); //定义记数器 int i = 0; //将老实体对象的没一个属性值和新实体对象进行循环比较 foreach (PropertyInfo p in pi) { //防止object.Equals时实例化对象发生异常 object o_new = newMod.GetType().GetProperty(p.Name).GetValue(newMod, null); if (o_new == null) o_new = (object)String.Empty; //防止object.Equals时实例化对象发生异常 object o_old = p.GetValue(oldMol, null); if (o_old == null) o_old = (object)String.Empty; //新老实体比较并记录成功次数 if (object.Equals(o_new, o_old)) { i++; } //若成功次数和属性数目相等则说明已经存在或者没有发生过修改条出循环 if (i == pi.Length) { IsExist = true; break; } } //没有发生过修改条出循环 if (IsExist) break; } //如果不存在则添加该实体到List<T>中 if (!IsExist) list.Add(newMod); } return list; } 3楼的大神...List<DllFile>怎么定义的呀。。 我也想知道那个List<Dllfile>怎么写的,求指导啊,大神们 帮忙三角剖分的一个错误 请教 如何让窗口遮挡任务栏呢??? 多线程和异步调用的区别 js获取另一个页面的gridview值 怎样在winForm中实现嵌入到桌面的播放器啊?就好比"桌面天气秀"的那种... Access数据库自增列问题 关于发邮件编码的问题??急,在线等 如何将axSpreadsheet导出的XML转html在webBrowser显示! 解决送分?? 关于NPOI读取文档内存占用过大的情况 USB设备通讯的问题(写数据),已附上源码 想让label里字体滚动
{
ArrayList headersubList = new ArrayList();
//获取当前XML文档的根 一级
XmlNode oNode = m_oDom.DocumentElement; //获取根节点的所有子节点列表
XmlNodeList oList = oNode.ChildNodes; //标记当前节点
XmlNode oCurrentNode;
//遍历所有二级节点
for (int i = 0; i < oList.Count; i++)
{
//二级
oCurrentNode = oList[i]; //检测当前节点的名称,节点的值是否与已知匹配
if (oCurrentNode.Name.ToLower().Equals("store"))
{
//检测是否有子节点 三级
if (oCurrentNode.HasChildNodes)
{
Console.WriteLine(oCurrentNode.ChildNodes.Count); //遍历当前节点的所有子节点
for (int n = 0; n < oCurrentNode.ChildNodes.Count; n++)
{
//检测当前节点的子节点名称是否与已知匹配
if (oCurrentNode.ChildNodes[n].Name.ToLower() == "sale")
{
//获取该节点所有属性,以供查询
XmlNamedNodeMap oMap = oCurrentNode.ChildNodes[n].Attributes; Hashtable headItem = new Hashtable();
headItem.Add("Id", oCurrentNode.Attributes.GetNamedItem("Id").Value);
headItem.Add("Name", oCurrentNode.Attributes.GetNamedItem("Name").Value);
headItem.Add("OrderNo", oMap.GetNamedItem("OrderNo").Value);
headItem.Add("Qty", oMap.GetNamedItem("Qty").Value); headersubList.Add(headItem); Console.WriteLine(oCurrentNode.Attributes.GetNamedItem("Id").Value);
Console.WriteLine(oCurrentNode.Attributes.GetNamedItem("Name").Value);
Console.WriteLine(oMap.GetNamedItem("OrderNo").Value);
Console.WriteLine(oMap.GetNamedItem("Qty").Value); Console.ReadLine();
}
}
}
}
}
}
//定义了一个DllFile类来辅助,然后再根据差异的Lisst<DllFile>来生成一个对比后有差异的xml文件.
public List<DllFile> GetModiflyList<T>(List<DllFile> newModel, List<DllFile> oldModel)
{
List<DllFile> list = new List<DllFile>();
foreach (DllFile newMod in newModel)
{
bool IsExist = false;
foreach (DllFile oldMol in oldModel)
{
//取得老实体对象的属性集合
PropertyInfo[] pi = oldMol.GetType().GetProperties();
//定义记数器
int i = 0; //将老实体对象的没一个属性值和新实体对象进行循环比较
foreach (PropertyInfo p in pi)
{
//防止object.Equals时实例化对象发生异常
object o_new = newMod.GetType().GetProperty(p.Name).GetValue(newMod, null);
if (o_new == null)
o_new = (object)String.Empty; //防止object.Equals时实例化对象发生异常
object o_old = p.GetValue(oldMol, null);
if (o_old == null)
o_old = (object)String.Empty; //新老实体比较并记录成功次数
if (object.Equals(o_new, o_old))
{
i++;
}
//若成功次数和属性数目相等则说明已经存在或者没有发生过修改条出循环
if (i == pi.Length)
{
IsExist = true;
break;
}
} //没有发生过修改条出循环
if (IsExist)
break;
} //如果不存在则添加该实体到List<T>中
if (!IsExist)
list.Add(newMod); }
return list;
}