【问题标题】:Does XMLUNIT provide option to ignore certain elements in XML's for comparison?XMLUNIT 是否提供忽略 XML 中某些元素进行比较的选项?
【发布时间】:2015-07-21 00:33:08
【问题描述】:

我想知道 XMLUNIT 是否提供了一种在进行比较之前忽略 XML 中存在的某些元素的方法。例如,如果我想忽略服务器随机生成的字段。是否有任何可用的XMLUnit 中的框以忽略某些元素,或者我需要编写自定义 DifferenceListener

另外,它是否提供了不匹配的元素名称?如果不是,那么比较两个 XML 的最佳方法是什么,它可以让我忽略某些元素并为我提供不匹配的元素名称/值?

【问题讨论】:

    标签: java xml xmlunit


    【解决方案1】:

    恐怕自定义DifferenceListener 是目前唯一可行的方法。 XMLUnit2 (https://github.com/xmlunit/xmlunit/issues/26) 的功能请求尚未实现。

    实现DifferenceListener 可能有点麻烦,因为您不仅会收到Differences 用于您想要忽略的元素,而且很可能还会收到父元素的子元素数量的Differences。

    每个Difference 包含NodeDetails 用于在测试和控制端看到的节点,NodeDetail 包含DOM Node(在您的情况下将是Element)。

    【讨论】:

    • 感谢 Stefan,我不想在这里写任何复杂的东西,因为我正在编写此代码用于单元测试(测试 SOAP 网络服务响应。)你认为,我们还有其他方法吗?可以在比较后确定所有元素在预期和实际 XML 中不匹配的内容,我可以将其放入测试用例报告中。(我们不再需要忽略元素)
    • 抱歉耽搁了,Torukmakto。使用DetailedDiff 不会给您所有差异(每个感知差异可能不止一个Difference 对象,因为缺少节点会导致它们的父节点不同)?