Mam dwa pliki mają te same dane, ale w różnych wierszach.
Plik 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>
Plik 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>
Jeśli użyję diff file1 file2
polecenia, otrzymuję poniżej odpowiedzi:
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>
Ale nie muszę mieć różnicy, ponieważ te pliki mają te same dane w różnych wierszach.
bash
shell
xml
file-comparison
użytkownik32026
źródło
źródło
xmldiff
, ale myślę, że nadal zauważy to zmianę kolejności, ponieważ kolejność jest istotna w ogólnym pliku XML. Myślę, że najlepszym rozwiązaniem jest użycie parsera i generatora XML, aby umieścić każdy plik w kanonicznej kolejności i formacie, a następnie użyćxmldiff
lubdiff
. Zadanie dla twojego ulubionego języka skryptowego (Perl, Ruby, Python itp.).Odpowiedzi:
Możesz osiągnąć to, co chcesz za pomocą małego skryptu Python (musisz zainstalować Python, a także
lxml
zestaw narzędzi).tagsort.py
:Ten skrypt sortuje elementy pierwszego poziomu w katalogu głównym dokumentu XML według zawartości elementu drugiego poziomu, wysyłając wynik na standardowe wyjście. Nazywa się to tak:
Gdy już to osiągniesz , możesz użyć podstawienia procesu, aby uzyskać różnicę na podstawie jego wyniku (dodałem jeden element i zmieniłem inny w przykładowych plikach, aby wyświetlić niepusty wynik):
źródło
Miałem podobny problem i ostatecznie znalazłem: /superuser/79920/how-can-i-diff-two-xml-files
Ten post sugeruje zrobienie kanonicznego sortowania XML, a następnie zrobienie różnicy. Poniższe czynności powinny działać, jeśli korzystasz z systemu Linux, Mac lub jeśli masz zainstalowany system Windows podobny do cygwina:
źródło
Jest oznaczony jako shell, ale szczerze mówiąc wolę używać języka skryptowego z analizatorem składni. W tym przypadku
perl
zXML::Twig
.Wygląda to mniej więcej tak:
Wyraźnie porównuję jeden element „Tożsamość” na raz i sprawdzam, czy wszystkie pola w jednym istnieją w drugim, o tej samej wartości.
A następnie odwrócenie tego, ponieważ drugi plik może zawierać dodatkowe wpisy.
źródło