首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#怎的比较两个xml里节点内容的不同(升级用)

2014-01-21 
C#怎样比较两个xml里节点内容的不同(升级用)有两个xml文件,结构是完全相同的:server.xml?xml version1.

C#怎样比较两个xml里节点内容的不同(升级用)
有两个xml文件,结构是完全相同的:


server.xml
<?xml version="1.0" encoding="utf-8"?>
<FileInfo>
    <file>
        <Name>1.jpg</Name>
        <Ldate>2012-05-01 </Ldate>
    </file>

    <file>
        <Name>2.jpg</Name>
        <Ldate>2012-05-02 </Ldate>
    </file>

   <file>
        <Name>3.jpg</Name>
        <Ldate>2012-04-02 17:27:56</Ldate>
    </file>

   <file>
        <Name>4.jpg</Name>
        <Ldate>2012-05-02 </Ldate>
    </file>
<FileInfo>



client.xml
<?xml version="1.0" encoding="utf-8"?>
<FileInfo>
    <file>
        <Name>1.jpg</Name>
        <Ldate>2012-04-01 </Ldate>
    </file>

    <file>
        <Name>2.jpg</Name>
        <Ldate>2012-04-02 </Ldate>
    </file>
    
   <file>
        <Name>3.jpg</Name>
        <Ldate>2012-04-02 </Ldate>
    </file>
<FileInfo>


我的思路是要做一个升级程序,判断文件修改时间,然后获得最新的文件名称Name。

其中server.xml是服务器的文件列表,client.xml是客户端的文件信息.
1.如果有相同名称的文件,则比较LDate,取最新的修改时间的文件
2.如果没有相同的文件,则不用对比,直接取服务器里的文件

现在的目的是要得到需要更新的文件有:1.jpg,2.jpg,4.jpg(3.jpg没有更新过则不用更新,4.jpg是新增加的)
[解决办法]
遍历比较 file节点的name相同的 Ldate的值
[解决办法]
遍历比较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();
                                }
                            }
                        }
                    }
                }
 }

热点排行