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

XMLUnit - different element selector for duplicate element names

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

<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 编写一个单独的元素选择器条件 以及 //indicator/e 的不同元素选择器条件。现在我正在使用下面的代码

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

但这个条件最适合//indicator/e。我需要有一个单独的条件,例如

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

我在这里很震惊,请建议我如何克服这个问题。

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

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

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