在C#中比较两个Xml节点

5
有没有一种简单的方法来比较两个XML结构以确定它们是否具有相同的结构和数据?
我有一个返回XmlNode的函数,并且正在尝试为其编写单元测试。我将正确的XML结果存储在文件中。在测试期间,我将文件加载到XmlDocument中,找到正确的XmlNode并与函数的结果进行比较。直接比较不起作用(如预期的那样),而InnerXml也不起作用。 我考虑删除InnerXml中的所有空格并进行比较,或编写自己的比较以遍历树,但我都不太喜欢这些选项。

你正在运行哪个版本的.NET? - John Saunders
3个回答

8

1
问题涉及到 XmlDocument/XmlNode,而不是关于 LINQ to XML。 - Pavel Minaev
1
准确来说,他的问题是关于比较XML结构的。他的问题出在他的方法上(使用XmlDocument)。我同意CodeToGlory的观点:XNode.DeepEquals。 - Ed Power

2

像CodeToGlory所说的那样,XNode.DeepEquals()可能适合您的需求,请查看MSDN页面上的备注部分。

如果您被XmlDocument卡住了(而不是XDocument),答案是:没有简单的(现有的)方法可以做到这一点。XmlNode没有重写Equals(),也没有提供替代方案。但编写它并非不可能,并且可以使用相同的备注部分作为树遍历算法的起点。

首先要清楚您的要求,包括属性、注释、CDATA节点等。


2
如果你必须使用 XmlDocument 和其支持的类型,可以考虑使用微软的 XmlDiffPatch,它可以在XML数据结构上执行可定制的差异操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接