首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XNode.DeepEquals意外返回false

XNode.DeepEquals意外返回false
EN

Stack Overflow用户
提问于 2014-06-11 07:07:50
回答 2查看 2.9K关注 0票数 9

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

示例

代码语言:javascript
复制
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());

输出

代码语言:javascript
复制
<someXml xmlns="someNamespace" />
<someXml xmlns="someNamespace" />
False
True

字符串被认为是相等的,但XML树却不是。为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-11 07:15:57

我已经弄清楚了区别是什么,但并不是为什么不同。

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

代码语言:javascript
复制
var xmlDirect = new XDocument(new XElement(
  XNamespace.Get("someNamespace") + "someXml",
  new XAttribute("xmlns", "someNamespace")));

这就好像命名空间只在将树转换为文本表示时才算为属性。

票数 5
EN

Stack Overflow用户

发布于 2021-03-25 14:57:22

解析之后,您将得到一个XDocument。尝试检索节点以在DeepEqual中使用它:

var xmlFromString =xmlFromString

这为我解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24156689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档