【发布时间】:2014-06-11 07:07:50
【问题描述】:
使用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 树不是。为什么?
【问题讨论】:
-
有趣的是,
DeepEquals也仅针对根元素报告 false...所以这不是文档声明问题,例如。 -
不,已经试过了;-)。但如果命名空间被删除,它会正确报告 true。
-
我得出的结论是 DeepEquals() 完全不适用于比较。例如,它不同于
和 。这太荒谬了。
标签: c# .net xml linq-to-xml