У меня два файла имеют одинаковые данные, но в разных строках.
Файл 1:
<Identities>
<Identity>
<Id>048206031415072010Comcast.USR8JR</Id>
<UID>ccp_test_79</UID>
<DisplayName>JOSH CCP</DisplayName>
<FirstName>JOSH</FirstName>
<LastName>CCP</LastName>
<Role>P</Role>
<LoginStatus>C</LoginStatus>
</Identity>
<Identity>
<Id>089612381523032011Comcast.USR1JR</Id>
<UID>94701_account1</UID>
<DisplayName>account1</DisplayName>
<FirstName>account1</FirstName>
<LastName>94701</LastName>
<Role>S</Role>
<LoginStatus>C</LoginStatus>
</Identity>
</Identities>
Файл 2:
<Identities>
<Identity>
<Id>089612381523032011Comcast.USR1JR</Id>
<UID>94701_account1</UID>
<DisplayName>account1</DisplayName>
<FirstName>account1</FirstName>
<LastName>94701</LastName>
<Role>S</Role>
<LoginStatus>C</LoginStatus>
</Identity>
<Identity>
<Id>048206031415072010Comcast.USR8JR</Id>
<UID>ccp_test_79</UID>
<DisplayName>JOSH CCP</DisplayName>
<FirstName>JOSH</FirstName>
<LastName>CCP</LastName>
<Role>P</Role>
<LoginStatus>C</LoginStatus>
</Identity>
</Identities>
Если я использую diff file1 file2
команду, я получаю ответ ниже:
1,10d0
< <Identities>
< <Identity>
< <Id>048206031415072010Comcast.USR8JR</Id>
< <UID>ccp_test_79</UID>
< <DisplayName>JOSH CCP</DisplayName>
< <FirstName>JOSH</FirstName>
< <LastName>CCP</LastName>
< <Role>P</Role>
< <LoginStatus>C</LoginStatus>
< </Identity>
20a11,20
> <Identities>
> <Identity>
> <Id>048206031415072010Comcast.USR8JR</Id>
> <UID>ccp_test_79</UID>
> <DisplayName>JOSH CCP</DisplayName>
> <FirstName>JOSH</FirstName>
> <LastName>CCP</LastName>
> <Role>P</Role>
> <LoginStatus>C</LoginStatus>
> </Identity>
Но мне не нужно получать никакой разницы, потому что эти файлы имеют одинаковые данные в разных строках.
bash
shell
xml
file-comparison
user32026
источник
источник
xmldiff
, но я думаю, что все равно заметят изменение порядка, так как порядок важен в универсальном XML. Я думаю, что ваш лучший подход - использовать синтаксический анализатор и генератор XML, чтобы расположить каждый файл в каноническом порядке и формате, а затем использоватьxmldiff
илиdiff
. Работа для вашего любимого языка сценариев (Perl, Ruby, Python и т. Д.).Ответы:
Вы можете достичь желаемого с помощью небольшого скрипта Python (вам понадобится установленный Python, а также
lxml
инструментарий).tagsort.py
:Этот сценарий сортирует элементы первого уровня в корневом каталоге документа XML по содержимому элемента второго уровня, отправляя результат в стандартный вывод. Это называется так:
Получив это, вы можете использовать подстановку процесса, чтобы получить diff на основе его вывода (я добавил один элемент и изменил другой в ваших файлах примеров, чтобы показать непустой результат):
источник
У меня была похожая проблема, и я в итоге обнаружил: /superuser/79920/how-can-i-diff-two-xml-files
В этом посте предлагается выполнить каноническую сортировку по XML, а затем выполнить diff. Следующее должно работать для вас, если вы используете Linux, Mac или если у вас Windows что-то вроде Cygwin установлен:
источник
Это теговая оболочка, но, честно говоря, я предпочитаю использовать язык сценариев с парсером. В этом случае
perl
сXML::Twig
.Это выглядит примерно так:
Я явно сравниваю один элемент «Идентичность» за раз и проверяю, чтобы все поля в одном существовали в другом с одинаковым значением.
И затем, наоборот, потому что второй файл может иметь дополнительные записи.
источник