XMLUnit - другой селектор элементов для дублированных имен элементов - PullRequest
0 голосов
/ 02 мая 2018

Я использую XMLunit для сравнения XML. У меня есть 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();

но это условие лучше всего подходит для // индикатора / э. Мне нужно отдельное условие типа

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

Я поражен здесь и, пожалуйста, предложите мне решить эту проблему.

1 Ответ

0 голосов
/ 02 мая 2018

Условный компоновщик предлагает более общий when, который принимает Predicate<? super Element>, так что вы можете кодировать более конкретные условия, такие как

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

конечно, лучше добавить несколько нулевых проверок и обработку ошибок, но вы поняли идею.

...