ElementQualifier XMLUnit запутывается, когда есть несколько элементов с одинаковым именем тега

Я пытаюсь сравнить ниже два XML... Я делаю тест сходства.

XML1

<top> <first>true</first> <!--- control node 1 ----> <second> <!--- control node 2 ----> <secondpart1>ooo</secondpart1> </second> <third> <!--- control node 3 ----> <thirdpart1>zzzz</thirdpar1> </third> <third> <!--- control node 4 ----> <thirdpart1>zzzz</thirdpar1> <thirdpart2>zzzz</thirdpar2> </third> </top>

xml2

<top> <second> <!--- test node 1 ----> <secondpart1>ooo</secondpart1> </second> <third> <!--- test node 2 ----> <thirdpart1>zzzz</thirdpar1> </third> <third> <!--- test node 3 ----> <thirdpart1>zzzz</thirdpar1> <thirdpart2>zzzz</thirdpar2> </third> <first>true</first> <!--- test node 4 ----> </top>

Я получаю эту ошибку

[разные] Ожидаемое количество дочерних узлов "1", но было "2". Похоже, он сравнивает управляющий узел 3 с тестовым узлом 3. И поскольку имена элементов совпадают с "третьим", он выполняет сравнение. Есть ли работа вокруг такой ситуации?

Это мой код

    Diff d = new Diff(xmlResponseTrim, serializedResponseTrim);
    DetailedDiff dd = new DetailedDiff(d);
    dd.overrideDifferenceListener(new IgnoreTextAndAttributeValuesDifferenceListener());
    System.out.println(dd);
    assertTrue(dd.similar());

1 ответ

ElementQualifier Интерфейс - это то, что определяет, какие элементы XMLUnit сравнивают друг с другом. Для вашего конкретного случая RecursiveElementNameAndTextQualifier будет работать, но это не общее решение. В более сложных случаях вам придется реализовать соответствующую стратегию в своей собственной реализации.

Другие вопросы по тегам