I,m using XMLunit for comparing XMLs.i have xmls as below.
<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>
as in above xml, I need to write different element selector conditions for different e i.e I need to write a separate element selector condition for //e and different element selector condition for //indicator/e. right now im using below code
ElementSelectors.conditionalBuilder()
.whenElementIsNamed("e").thenUse(ElementSelectors.byXPath("//indicator/e/name",ElementSelectors.byNameAndText))
.elseUse(ElementSelectors.byName)
.build();
but this condition best suited for //indicator/e. I need to have a separate condition like
ElementSelectors.conditionalBuilder()
.whenElementIsNamed("e").thenUse(ElementSelectors.byXPath("//e/number",ElementSelectors.byNameAndText))
.elseUse(ElementSelectors.byName)
.build();
I'm struck here and please suggest me on overcoming this issue.
The conditional builder offers a more generic when
which accepts a Predicate<? super Element>
so you can code up more specific conditions like
when(e => "e".equals(e.getNodeName())
&& "indicator".equals(e.getParentNode().getNodeName()))
of course you better add some null-checks and error handling, but you get the idea.