XNode.DeepEquals意外地返回false
使用XNode.DeepEquals()
来比较xml元素,它意外地在我认为应该是等价的两个xml文档上返回false
。
例
var xmlFromString = XDocument.Parse("<someXml xmlns="someNamespace"/>");
var xmlDirect = new XDocument(new XElement(
XNamespace.Get("someNamespace") + "someXml"));
Console.WriteLine(xmlFromString.ToString());
Console.WriteLine(xmlDirect.ToString());
Console.WriteLine(XNode.DeepEquals(xmlFromString, xmlDirect));
Console.WriteLine(xmlFromString.ToString() == xmlDirect.ToString());
产量
<someXml xmlns="someNamespace" />
<someXml xmlns="someNamespace" />
False
True
字符串被认为是相等的,但是XML树不是。 为什么?
我已经研究出了区别,但不是为什么它不同。
在第一种形式中,您有一个xmlns
属性。 在第二种形式中,您不会 - 根据Attributes()
返回的内容。 如果您明确构造了XAttribute
,则DeepEquals
将返回true
:
var xmlDirect = new XDocument(new XElement(
XNamespace.Get("someNamespace") + "someXml",
new XAttribute("xmlns", "someNamespace")));
就好像名称空间基本上只在将树转换为文本表示形式时才算作属性。
链接地址: http://www.djcxy.com/p/79671.html上一篇: XNode.DeepEquals unexpectedly returns false
下一篇: How to render template other than application.hbs in EmberJS?