我使用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();
我很震惊,请建议我克服这个问题。
答案 0 :(得分:0)
条件构建器提供了更通用的when
,它接受Predicate<? super Element>
,因此您可以编写更具体的条件,例如
when(e => "e".equals(e.getNodeName())
&& "indicator".equals(e.getParentNode().getNodeName()))
当然你最好添加一些空检查和错误处理,但你明白了。