使用XNode.DeepEquals()来比较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树却不是。为什么?
发布于 2014-06-11 07:15:57
我已经弄清楚了区别是什么,但并不是为什么不同。
在第一种形式中,您有一个xmlns属性。在第二种形式中,您没有--而不是根据Attributes()返回的内容。如果显式构造XAttribute,DeepEquals将返回true
var xmlDirect = new XDocument(new XElement(
XNamespace.Get("someNamespace") + "someXml",
new XAttribute("xmlns", "someNamespace")));这就好像命名空间只在将树转换为文本表示时才算为属性。
发布于 2021-03-25 14:57:22
解析之后,您将得到一个XDocument。尝试检索节点以在DeepEqual中使用它:
var xmlFromString =xmlFromString
这为我解决了这个问题。
https://stackoverflow.com/questions/24156689
复制相似问题