我在Java中使用xmlunit 2.2.1并且要匹配以下XML。这里的问题有两个:
0.250000
)出于这个原因,ByNameAndTextRecSelector()
不起作用,因为它要求所有文本节点都是完全匹配的,这不是这里的情况。我已经实现了DifferenceEvaluator
,它将处理数字中的尾随零。但是我用什么来选择要比较的正确元素?
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>
答案 0 :(得分:1)
code
元素是否足以选择正确的节点?如果是这样,那么像用户指南示例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
结合使用在上述条件内。