gpt4 book ai didi

c# - XNode.DeepEquals 意外返回 false

转载 作者:数据小太阳 更新时间:2023-10-29 01:45:25 24 4
gpt4 key购买 nike

使用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 树不是。为什么?

最佳答案

我已经弄清楚是什么,但不是为什么它是不同的。

在第一种形式中,您有一个 xmlns 属性。在第二种形式中,您不需要 - 不是根据 Attributes() 返回的内容。如果您显式构造一个XAttributeDeepEquals 将返回true:

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

基本上,就好像在将树转换为文本表示时命名空间只算作一个属性。

关于c# - XNode.DeepEquals 意外返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24156689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com