匹配具有不同顺序和数字格式的嵌套元素
Matching nested elements with different order and number format
我将 xmlunit 2.2.1 与 Java 一起使用,并有以下 XML 匹配。这里的问题是双重的:
- 顺序不一样
- 一些数值可能有尾随零(例如
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
在上面的条件中。
我将 xmlunit 2.2.1 与 Java 一起使用,并有以下 XML 匹配。这里的问题是双重的:
- 顺序不一样
- 一些数值可能有尾随零(例如
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
在上面的条件中。