Есть ли альтернативы 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?