【问题标题】:Compare two XmlNodes in C#在 C# 中比较两个 XmlNode
【发布时间】:2010-11-21 18:46:10
【问题描述】:

有没有一种简单的方法可以比较两个 XML 结构以确定它们是否具有相同的结构和数据?

我有一个返回 XmlNode 的函数,我正在尝试为它编写单元测试。我将正确的 XML 结果存储在一个文件中。在测试期间,我将文件加载到 XmlDocument 中,找到正确的 XmlNode 并与函数的结果进行比较。直接比较不起作用(如预期的那样)并且 InnerXml 也不起作用。 我正在考虑从 InnerXml 中删除所有空格并进行比较,或者编写我自己的比较来遍历树,但我不太喜欢这两个选项。

【问题讨论】:

  • 您运行的是什么版本的 .NET?

标签: c# .net xml xmlnode


【解决方案1】:

XNode.DeepEquals。使用前请阅读注意事项。

【讨论】:

  • 问题是关于XmlDocument/XmlNode,而不是关于LINQ to XML。
  • 准确地说,他的问题是关于比较 XML 结构的。他的问题在于他的方法(使用 XmlDocument)。我同意 CodeToGlory:XNode.DeepEquals。
【解决方案2】:

就像 CodeToGlory 回答的那样,XNode.DeepEquals() 可能适合您的账单,请查看 MSDN 页面上的备注部分。

如果您坚持使用 XmlDocument(而不是 XDocument),答案是:不,没有简单的(现有方法)可以做到这一点。 XmlNode 不会覆盖 Equals(),也不会提供替代方法。但是也不是不能写,同样的 Remarks 部分可以作为 tree-walk 算法的起点。

首先要清楚了解您的需求,包括属性、cmets、CDATA 节点等。

【讨论】:

    【解决方案3】:

    如果您必须使用 XmlDocument 及其支持类型,请考虑使用 Microsoft 的 XmlDiffPatch,它对 XML 数据结构执行可自定义的差异操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      相关资源
      最近更新 更多