简单的XML比较

时间:2014-02-01 07:20:13

标签: c# xml

我有一个关于节点的innerxml之间的简单比较的问题。我编写了以下简单示例,但这不适用于 Innerxml

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;


namespace CompareXML
{
class Program
{
    static void Main(string[] args)
    {
        string s1 = @"<Deals>
             <Deal id='20504'> 
             <Marketarea>H</Marketarea>
             <price>22</price>
             </Deal>
             <Deal id='20505'> 
             <Marketarea>K</Marketarea>
             <price>22</price>
             </Deal>  
            </Deals>";
        string s2 = @"<Deals>
             <Deal id='20504'> 
             <Marketarea>S</Marketarea>
             <price></price>
             </Deal>  
            </Deals>";
        XmlDocument d1 = new XmlDocument();
        XmlDocument d2 = new XmlDocument();
        d1.LoadXml(s1);
        d2.LoadXml(s2);

        int id = 20504;
        var text1 = d1.SelectSingleNode("Deal[@id='"+id+"']").InnerXml;
        var text2 = d2.SelectSingleNode("Deal[@id='" + id + "']").InnerXml;
        if (text1 == text2)
            Console.WriteLine("match");
        else
            Console.WriteLine("No match");

        Console.ReadKey();
    }

   }
}

我无法理解为什么当我有一个带有属性的节点时,Innerxml不起作用,当我只有一个没有属性的简单节点时,例如节点<Deal>有效。

提前致谢!

错误

enter image description here

修改

所以我希望从这个例子中获取以下文本

     <Marketarea>H</Marketarea>
     <price>22</price>

然后进行比较。

1 个答案:

答案 0 :(得分:1)

异常是因为SelectSingleNode返回null - 它在找不到节点时执行此操作。

相对于文档,提供给SelectSingleNode的XPath是错误的。与下面的“工作”的以下XPath查询进行比较:

d1.SelectSingleNode("/Deals/Deal[@id='"+id+"']").InnerXml;

可替换地:

d1.SelectSingleNode("//Deal[@id='"+id+"']").InnerXml;