遍历比较 file节点的name相同的 Ldate的值

解决方案 »

  1.   

    遍历比较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();
                                    }
                                }
                            }
                        }
                    }
     }
      

  2.   

    楼上的貌似比较麻烦,这里和大家分享一个好东西,用这个搞定了://比较两个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.   

    3楼的大神...List<DllFile>怎么定义的呀。。
      

  4.   

    我也想知道那个List<Dllfile>怎么写的,求指导啊,大神们