Есть ли альтернативы XmlUnit?

Мне нужно разложить большие структуры каталогов, содержащие сгенерированные файлы .xml и .wsdl. Сгенерированные файлы .xml различаются в том порядке, в котором появляются дочерние элементы. Метод XmlUnit Diff.similar() должен обрабатывать этот случай:

'Два документа считаются "похожими", если они содержат одни и те же элементы и атрибуты независимо от порядка.

Однако это не так. Я взял файл .xml, изменил порядок двух дочерних элементов, и XmlUnit говорит, что они не похожи.

XmlUnit не работает, предоставляя больше функциональности, чем встроенная утилита diff.

Есть ли альтернатива XmlUnit, которая распознает простые различия в .xml файлах, например упорядочивание дочерних элементов?

Ответы

Ответ 1

У меня есть аналогичная проблема, в моем случае у меня было несколько тегов с тем же именем, но разные атрибуты (порядок не имел значения), но XmlUnit всегда сначала проверялся первым, вторым со вторым..., который мог бы поменяться местами. Мой вопрос:

Сравнение похожих xml файлов с XmlUnit с неупорядоченными тегами (одинаковое имя тега с разными атрибутами)

Я нашел решение здесь:

http://www.infoq.com/articles/xml-unit-test

В моем случае было решено просто переопределить квалификатор элемента:

    Diff diff = new Diff(controlXml, responseXml);
    diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());

Ответ 2

Я выяснил, что установка следующей опции разрешила проблему неточной (un) подобия:

XMLUnit.setIgnoreWhitespace(true);

Ответ 3

Я согласен с комментарием Джима. Большинство проблем, с которыми я столкнулся с XmlUnit, были связаны с неправильной инициализацией.

Однако вы всегда можете взглянуть на исходный код XMLUnit и заменить свой собственный Diff-обработчик, если вы чувствуете, что реализация не делает то, что вам нужно. Код достаточно прост для понимания, и вы сможете полностью контролировать поведение без особых усилий, необходимых для реализации вашего собственного механизма diff.

Ответ 4

Лучше отсортировать XML, прежде чем сравнивать его с xmlunit, вместо того, чтобы использовать сортировку xmlunit, написать свой собственный, было бы намного проще, чем конфигурировать xmlunit для ваших нужд.

Ответ 5

Вы пробовали XUnit?