XMLUnit - 重复元素名称的不同元素选择器

时间:2018-05-02 09:58:43

标签: xmlunit-2

我使用XMLunit比较XMLs.i有xmls如下。

<e>
 <accounts>
  <number>56482</number>
  <name>ererr</name>
 </accounts>
</e>    
<indicator>
 <e>
  <name>name1</name>
  <value>value1<value>
 </e>
 <e>
  <name>name2</name>
  <value>value2<value>
 </e>
</indicators>

如上面的xml,我需要为不同的 e 编写不同的元素选择器条件,即我需要为// e编写单独的元素选择器条件 和//指标/ e的不同元素选择条件。现在我使用下面的代码

ElementSelectors.conditionalBuilder()
.whenElementIsNamed("e").thenUse(ElementSelectors.byXPath("//indicator/e/name",ElementSelectors.byNameAndText))
                .elseUse(ElementSelectors.byName)
                .build();

但这种情况最适合//指标/ e。我需要有一个单独的条件,如

 ElementSelectors.conditionalBuilder()
    .whenElementIsNamed("e").thenUse(ElementSelectors.byXPath("//e/number",ElementSelectors.byNameAndText))
                    .elseUse(ElementSelectors.byName)
                    .build();

我很震惊,请建议我克服这个问题。

1 个答案:

答案 0 :(得分:0)

条件构建器提供了更通用的when,它接受​​Predicate<? super Element>,因此您可以编写更具体的条件,例如

when(e => "e".equals(e.getNodeName())
    && "indicator".equals(e.getParentNode().getNodeName()))

当然你最好添加一些空检查和错误处理,但你明白了。