XNode.DeepEquals意外返回false
本文关键字:false 返回 意外 DeepEquals XNode | 更新日期: 2023-09-27 18:08:00
使用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
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")));
基本上,在将树转换为文本表示时,名称空间只算作属性。
解析后得到一个XDocument。尝试检索节点以在DeepEqual中使用它:
var xmlFromString = XDocument.Parse("
这就解决了我的问题。