Saya punya dua file memiliki data yang sama tetapi dalam baris yang berbeda.
File 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>
File 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>
Jika saya menggunakan diff file1 file2
perintah, saya mendapatkan respons di bawah ini:
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>
Tapi saya tidak perlu mendapat perbedaan, karena file-file ini memiliki data yang sama di baris yang berbeda.
bash
shell
xml
file-comparison
user32026
sumber
sumber
xmldiff
, tetapi saya pikir itu masih akan melihat perubahan pesanan, karena pesanan relevan dalam XML umum. Saya pikir pendekatan terbaik Anda adalah menggunakan parser & generator XML untuk meletakkan setiap file dalam urutan dan format kanonik, kemudian gunakanxmldiff
ataudiff
. Pekerjaan untuk bahasa skrip favorit Anda (Perl, Ruby, Python, dll.).Jawaban:
Anda dapat mencapai apa yang Anda inginkan dengan bantuan skrip Python kecil (Anda harus memasang Python, serta
lxml
toolkit).tagsort.py
:Skrip ini mengurutkan elemen tingkat pertama di bawah akar dokumen XML dengan konten elemen tingkat kedua, mengirimkan hasilnya ke stdout. Disebut seperti ini:
Setelah Anda mendapatkannya, Anda dapat menggunakan subtitusi proses untuk mendapatkan perbedaan berdasarkan hasilnya (Saya telah menambahkan satu elemen dan mengubah elemen lainnya di file contoh Anda untuk menampilkan hasil yang tidak kosong):
sumber
Saya memiliki masalah yang serupa dan akhirnya menemukan: /superuser/79920/how-can-i-diff-two-xml-files
Posting itu menyarankan untuk melakukan semacam xml kanonik kemudian melakukan diff. Berikut ini akan berfungsi untuk Anda jika Anda berada di linux, mac, atau jika Anda memiliki windows seperti cygwin diinstal:
sumber
Ini ditandai shell, tapi jujur saya lebih suka menggunakan bahasa scripting dengan parser. Dalam hal ini
perl
denganXML::Twig
.Bunyinya seperti ini:
Saya secara eksplisit membandingkan satu elemen 'Identitas' pada suatu waktu, dan memeriksa bahwa semua bidang dalam satu, ada di yang lain, dengan nilai yang sama.
Dan kemudian membalikkan itu, karena file kedua mungkin memiliki entri tambahan.
sumber