2017-01-24 4 views
0

У меня есть XML в следующем формате:Как игнорировать порядок элементов при сравниваете с XMLUnit

<Root> 
    <Elem1> 
     <SubElem1>A</SubElem1> 
     ... 
    </Elem1> 
    <Elem1> 
     <SubElem1>B</SubElem1> 
     ... 
    </Elem1> 
    <Elem2> 
     ... 
    </Elem2> 
    ... 
</Root> 

Я хочу поручить дифф двигатель XMLUnit, чтобы игнорировать порядок элементов ElemN, но только в пределах своей «группы».

Например:

  • Если второй и первый elem1 в предыдущем примере, изменится порядок => равно
  • Если elem2 станет, прежде чем elem1 или в середине elem1 => разности

Есть ли способ достичь этого результата?

ответ

0

Да, это задание ElementSelector. По умолчанию XMLUnit (2.x) сравнивает элементы в том порядке, в котором они появляются, но вы можете влиять на то, какой из братьев и сестер выбирается с помощью ElementSelector.

В вашем случае вы, кажется, довольны выбором элементов на заказ, если они не названы Elem1. Для Elem1 вы хотите выбрать пары на основе текста, вложенного в дочерний элемент SubElement1. Один из способов, чтобы написать такую ​​ElementSelector может быть

ElementSelectors.ConditionalBuilder() 
    .WhenElementIsNamed("Elem1") 
    .ThenUse(ElementSelectors.ByXPath("./SubElem1", ElementSelectors.ByNameAndText)) 
    .ElseUse(ElementSelectors.Default) 
    .Build(); 

Смотрите XMLUnit user guide для получения более подробной информации и примеров.

+0

Мне нужно было отрегулировать свой ответ на мои потребности, поскольку я хотел, чтобы все элементы были сгруппированы вместе, а не только элементы Elem1, но ElementSelector указал мне в правильном направлении. –

Смежные вопросы