在.NET中比较两个XML文档的最佳方法

10

我有一堆单元测试需要检查XML输出。

我最开始使用字符串比较,但是随着格式和表面上的差异增加,这种方法无法扩展。

在.NET中,最简单的方法是什么来评估生成的XML是否与测试预期的内容语义相同?

关闭,重复问题请参考如何比较两个XML文档?


同样的问题在这里:https://dev59.com/4HVC5IYBdhLWcg3w1E7w。 - bruno conde
2个回答

11

微软提供其XML Diff工具/类,在此处提供。我个人没有使用过它,但听起来它会帮助您入门:

"通过使用XMLDiff类,程序员可以根据对他们的应用程序重要的条件确定这两个文件是否实际上不同."

它似乎可以处理不同的顺序、空格、命名空间前缀等。


5
这是一个听起来很容易开始的问题,但是你挖掘得越深,就会发现问题的深度越大。
已经有许多现成的工具可以进行XML差异比较 - 包括GUI方式(类似于文本差异工具),以及命令行驱动/组件(更适合您的需求)。 XMLDiff就是这样的一个工具。
当你问一些问题时,问题就开始了 - 我想要输出什么?你只需要返回一个代码,告诉你它们是否相同或不同(对于单元测试目的,这可能已经足够了) - 还是你想要一个报告,告诉你有哪些差异?(如果您想找出问题在哪里,这也可能很有用)?如果是后者,你想要什么信息?你想要编辑距离吗?你想让它解释数字值并告诉你它们之间的差异吗?
节点排序呢?子节点应该按照特定的顺序排列 - 或者如果它们是相同的节点但顺序不同,那么可以吗?
您还可能希望能够指定要比较的内容。名称空间是否匹配?任何地方都有空格的意义吗?是否有某些节点您总是要忽略(例如“时间”属性),或者您是否希望对要比较哪些节点以及哪些节点不进行更细粒度的控制?
对于数字比较,您是否想允许公差?对于文本比较(文本节点),文本内部的空格是否重要?大写字母呢?
这样的问题可以一直延伸下去(就像我最近在工作中为这样的项目进行的分析一样)。
每个工具都以不同的程度和方式解决这些问题。
您可能会决定尽可能简单,并选择进行直接的逐节点比较,没有解释 - 并在最后告诉您它们是否相同或不同。我相信XMLDiff可以做到这一点(还有更多)。
另外值得考虑的是,如果您确实想处理不同的节点顺序或忽略某些分支等情况,您可以在比较之前将xslt变换应用于测试文档,以根据您的规则进行归一化。

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