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()返回的方面。 如果显式构造XAttributeDeepEquals将返回true

 var xmlDirect = new XDocument(new XElement( XNamespace.Get("someNamespace") + "someXml", new XAttribute("xmlns", "someNamespace"))); 

就好像命名空间在将树转换为文本表示时仅计为属性,基本上。