XNode.DeepEquals意外返回false
使用XNode.DeepEquals()
来比较xml元素,它意外地在两个我认为应该等效的xml文档上返回false
。
例
var xmlFromString = XDocument.Parse(""); 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());
产量
False True
字符串被认为是相同的,但XML树不是。 为什么?
我已经找到了差异,但不是为什么它不同。
在第一种forms中,您有一个xmlns
属性。 在第二种forms中,你没有 – 不是在Attributes()
返回的方面。 如果显式构造XAttribute
, DeepEquals
将返回true
:
var xmlDirect = new XDocument(new XElement( XNamespace.Get("someNamespace") + "someXml", new XAttribute("xmlns", "someNamespace")));
就好像命名空间在将树转换为文本表示时仅计为属性,基本上。