匹配具有不同顺序和数字格式的嵌套元素

Matching nested elements with different order and number format

我将 xmlunit 2.2.1 与 Java 一起使用,并有以下 XML 匹配。这里的问题是双重的:

  1. 顺序不一样
  2. 一些数值可能有尾随零(例如 0.250000

因此 ByNameAndTextRecSelector() 不起作用,因为它要求所有文本节点都完全匹配,而这里不是这种情况。我已经实现了一个 DifferenceEvaluator 来处理数字中的尾随零。但是我要用什么来 select 比较正确的元素呢?

XML 1:

<test>
  <table>
    <row>
      <element>
        <code>ALPHA</code>
        <scale>0.25</scale>
      </element>
    </row>
    <row>
      <element>
        <code>DELTA</code>
        <scale>0.1</scale>
      </element>
    </row>
  </table>
</test>

XML 2:

<test>
  <table>
    <row>
      <element>
        <code>DELTA</code>
        <scale>0.1</scale>
      </element>
    </row>
    <row>
      <element>
        <code>ALPHA</code>
        <scale>0.2500000</scale>
      </element>
    </row>
  </table>
</test>

code 元素是否足以 select 正确的节点?如果是这样,像用户指南示例 https://github.com/xmlunit/user-guide/wiki/SelectingNodes#conditional-elementselectors 这样的方法应该可行。

ElementSelectors.conditionalBuilder()
    .whenElementIsNamed("row").thenUse(ElementSelectors.byXPath("./element/code", ElementSelectors.byNameAndText))
    .elseUse(ElementSelectors.byName)
    .build();

这对不同的数字格式没有帮助。要处理它们,您必须覆盖 DifferenceEvaluator 并检测包含数字的 Text 节点,解析它们并将差异标记为 EQUAL(如果它们足够接近)。

如果 code 不够,那么您需要编写一个 ElementSelector 来处理我上面描述的 DifferenceEvaluator 之类的数字,并将其与 ElementSelectors.byNameAndText 在上面的条件中。