【问题标题】:Best way to compare 2 XML documents in .NET [duplicate]在.NET中比较2个XML文档的最佳方法[重复]
【发布时间】:2008-11-09 11:21:56
【问题描述】:

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

我已经开始比较字符串,但这不会随着格式和表面差异的阻碍而扩展。

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

关闭作为How would you compare two XML Documents?的副本

【问题讨论】:

  • 同样的问题here

标签: .net xml


【解决方案1】:

Microsoft 提供其 XML Diff 工具/类here。我没有亲自使用它,但听起来它会让你开始:

"通过使用 XMLDiff 类, 程序员能够确定是否 两个文件实际上是基于不同的 在重要的条件下 到他们的应用程序”

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

【讨论】:

    【解决方案2】:

    这是听起来很容易开始的问题之一,但你挖掘的越多,你在问题空间中发现的深度就越深。

    有许多预先存在的工具可以进行 xml 差异 - 都以 GUI 方式(与文本差异工具的行相同)和命令行驱动/组件(更符合您的需求)之后)。如前所述,XMLDiff 就是这样一种情况。

    当您提出以下问题时,麻烦就开始了 - 我希望它输出什么?您只是想要一个返回代码来说明它们是相同还是不同(出于单元测试目的,这实际上可能就足够了) - 或者您想要一个告诉您差异的报告? (如果您想找出问题所在,也可用于单元测试)?如果是后者,您如何获得这些信息?你想要编辑距离吗? 你想让它解释数值并告诉你它们之间的区别吗?

    节点排序呢?子节点是否应该按特定顺序排列 - 或者如果它们是相同的节点但顺序不同,可以吗?

    您可能还希望能够指定要比较的内容。命名空间应该匹配吗?空格在任何地方都很重要吗?您是否总是想忽略某些节点(例如“时间”属性),或者您想要更精细地控制哪些节点被比较,哪些不被比较?

    对于数值比较,您希望允许公差吗?对于文本比较(文本节点),文本中的空格是否重要?大写呢?

    你可以继续下去(正如我在最近工作的这样一个项目的分析中所做的那样)。

    每种工具都以不同的程度和不同的方式解决这些问题。

    您可能会决定让它尽可能简单,并进行直接的、逐个节点的比较,无需解释 - 最后告诉您它们是相同还是不同。我相信 xmldiff 会给你这个(以及更多)。

    另外值得考虑的是,如果您确实想处理不同节点排序或忽略某些分支等情况,您可以在比较之前对您的测试文档应用 xslt 转换,以根据您的规则对其进行规范化。

    【讨论】:

      猜你喜欢
      • 2010-09-13
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多