XNode.DeepEquals意外返回false

And*_*bel 8 .net c# xml linq-to-xml

使用XNode.DeepEquals()比较XML元素,它意外返回false的,我认为应该是等价的两个XML文档.

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());
Run Code Online (Sandbox Code Playgroud)

产量

<someXml xmlns="someNamespace" />
<someXml xmlns="someNamespace" />
False
True
Run Code Online (Sandbox Code Playgroud)

字符串被认为是相同的,但XML树不是.为什么?

Jon*_*eet 5

我已经制定了有什么区别,但不是为什么它是不同的.

在第一种形式中,您有一个xmlns属性.在第二种形式中,你没有 - 不是在Attributes()回报方面.如果你明确构造一个XAttribute,DeepEquals将返回true:

var xmlDirect = new XDocument(new XElement(
  XNamespace.Get("someNamespace") + "someXml",
  new XAttribute("xmlns", "someNamespace")));
Run Code Online (Sandbox Code Playgroud)

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