В Linux, как я могу создать разницу между двумя файлами XML?
В идеале я хотел бы иметь возможность настроить его на некоторые строгие вещи или ослабить некоторые вещи, такие как пробелы или порядок атрибутов.
Я буду часто беспокоиться о том, что файлы функционально одинаковы, но различие само по себе будет раздражать, особенно если файл XML не имеет много разрывов строк.
Например, следующее должно быть хорошо для меня:
<tag att1="one" att2="two">
content
</tag>
<tag att2="two" att1="one">
content
</tag>
vimdiff <(xmllint --c14n one.xml) <(xmllint --c14n two.xml)
Ответ Юкки у меня не сработал, но он указывал на канонический XML. Ни --c14n, ни --c14n11 не отсортировали атрибуты, но я обнаружил, что ключ --exc-c14n действительно отсортировал атрибуты. --exc-c14n не указан на странице руководства, но описан в командной строке как «эксклюзивный канонический формат W3C».
Предупреждение --exc-c14n удаляет заголовок xml, тогда как --c14n добавляет заголовок xml, если его там нет.
источник
Пытался использовать ответ @Jukka Matilainen, но у него были проблемы с пробелами (один из файлов был огромным в одну строку). Использование
--format
помогает пропустить различия между пробелами.Примечание: используйте
vimdiff
команду для параллельного сравнения xmls.источник
two.xml
был сгенерирован изone.xml
скрипта. Поэтому мне просто нужно было проверить, что было добавлено / удалено скриптом.--format
с--exc-c14n
; вероятно, будет еще медленнее обрабатывать :(--exc-c14n
Опция определяет сортировку атрибутов. В ваших конкретных файлах атрибуты, вероятно, уже отсортированы, но общий совет будет использовать комбинацию--format --exc-c14n
.Diffxml обеспечивает правильную базовую функциональность, хотя, похоже, не предлагает много вариантов конфигурации.
Изменить: Project Diffxml был перенесен на GitHub с 2013 года.
источник
Если вы также хотите игнорировать порядок дочерних элементов, я написал для этого простой инструмент на языке python
xmldiffs
:Получить его на https://github.com/joh/xmldiffs
источник
Мой скрипт Python xdiff.py для сравнения XML-файлов игнорирует различия в пробелах или порядке атрибутов (в отличие от порядка элементов).
Чтобы сравнить два файла
1.xml
и2.xml
, вы должны запустить скрипт следующим образом:В примере с OP он ничего не выводил бы и возвращал статус выхода
0
(без структурных или текстовых различий).В тех случаях, когда
1.xml
и2.xml
структурно отличаются, он имитирует унифицированный вывод GNU diff и возвращает статус выхода1
. Существуют различные варианты управления выводом, например,-a
для вывода всего контекста,-n
для вывода без контекста и-q
для подавления вывода в целом (при этом все еще возвращая состояние выхода).источник
Я использую Beyond Compare для сравнения всех типов текстовых файлов. Они производят версии для Windows и Linux.
источник
Наш SD Smart Differencer сравнивает документы на основе структуры, а не фактического макета.
Есть интеллектуальная разница XML. Для XML это означает соответствие порядка тегов и содержимого. Следует отметить, что текстовая строка в указанном вами фрагменте была другой. В настоящее время он не понимает XML-понятие атрибутов тега, указывающее, является ли пробел нормализованным или значимым.
источник
Не уверен, считается ли (зависимость) онлайн-инструментом решением проблемы, но, несмотря на это, я получил хороший результат в этом онлайн-инструменте сравнения XML . Это просто работает.
источник