我有一个关于节点的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>
有效。
提前致谢!
错误
修改
所以我希望从这个例子中获取以下文本
然后进行比较。 <Marketarea>H</Marketarea>
<price>22</price>
答案 0 :(得分:1)
异常是因为SelectSingleNode
返回null - 它在找不到节点时执行此操作。
相对于文档,提供给SelectSingleNode的XPath是错误的。与下面的“工作”的以下XPath查询进行比较:
d1.SelectSingleNode("/Deals/Deal[@id='"+id+"']").InnerXml;
可替换地:
d1.SelectSingleNode("//Deal[@id='"+id+"']").InnerXml;