1

我正在使用 XMLunit 来比较 XMLs。我有如下的 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编写一个单独的元素选择器条件,为//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();

我在这里感到震惊,请建议我克服这个问题。

4

1 回答 1

0

条件构建器提供了一个更通用when的接受 aPredicate<? super Element>所以你可以编写更具体的条件,比如

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

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

于 2018-05-02T16:03:23.890 回答