Di Linux, bagaimana saya bisa menghasilkan perbedaan antara dua file XML?
Idealnya, saya ingin dapat mengkonfigurasinya ke beberapa hal yang ketat, atau melonggarkan beberapa hal, seperti spasi, atau urutan atribut.
Saya akan sering peduli bahwa file-file tersebut secara fungsional sama, tetapi berbeda dengan sendirinya, akan mengganggu untuk digunakan, terutama jika file XML tidak memiliki banyak linebreak.
Sebagai contoh, berikut ini harus benar-benar baik-baik saja bagi saya:
<tag att1="one" att2="two">
content
</tag>
<tag att2="two" att1="one">
content
</tag>
vimdiff <(xmllint --c14n one.xml) <(xmllint --c14n two.xml)
Jawaban Jukka tidak bekerja untuk saya, tetapi itu menunjuk ke Canonical XML. Baik --c14n atau --c14n11 tidak mengurutkan atribut, tetapi saya memang menemukan saklar --exc-c14n yang mengurutkan atribut. --exc-c14n tidak terdaftar di halaman manual, tetapi dijelaskan pada baris perintah sebagai "format kanonik eksklusif W3C".
Peringatan --exc-c14n menghapus header xml sedangkan --c14n menambahkan header xml jika tidak ada.
sumber
Mencoba menggunakan jawaban @Jukka Matilainen tetapi memiliki masalah dengan white-space (salah satu file adalah satu-liner besar). Menggunakan
--format
bantuan untuk melewati perbedaan ruang putih.Catatan: Gunakan
vimdiff
perintah untuk perbandingan xmls berdampingan.sumber
two.xml
dihasilkanone.xml
oleh skrip. Jadi saya hanya perlu memeriksa apa yang ditambahkan / dihapus oleh skrip.--format
dengan--exc-c14n
; mungkin akan lebih lambat untuk memproses :(--exc-c14n
pilihan menentukan pengurutan atribut. Dalam file spesifik Anda, atribut mungkin sudah diurutkan, tetapi saran umum adalah menggunakan kombinasi--format --exc-c14n
.Diffxml mendapatkan fungsionalitas dasar yang benar, meskipun sepertinya tidak menawarkan banyak opsi untuk konfigurasi.
Sunting: Project Diffxml telah dimigrasikan ke GitHub sejak 2013.
sumber
Jika Anda ingin juga mengabaikan urutan elemen anak, saya menulis alat python sederhana untuk ini yang disebut
xmldiffs
:Dapatkan di https://github.com/joh/xmldiffs
sumber
Skrip Python saya xdiff.py untuk membandingkan file XML mengabaikan perbedaan dalam whitespace atau urutan atribut (berbeda dengan urutan elemen).
Untuk membandingkan dua file
1.xml
dan2.xml
, Anda akan menjalankan skrip sebagai berikut:Dalam contoh OP, itu tidak akan menghasilkan apa-apa dan mengembalikan status keluar
0
(tanpa perbedaan struktural atau tekstual).Dalam kasus di mana
1.xml
dan2.xml
berbeda secara struktural, ini meniru keluaran terpadu dari GNU diff dan mengembalikan status keluar1
. Ada berbagai opsi untuk mengontrol output, seperti-a
untuk mengeluarkan semua konteks,-n
untuk mengeluarkan tidak ada konteks, dan-q
untuk menekan output sama sekali (sambil tetap mengembalikan status keluar).sumber
Saya menggunakan Beyond Compare untuk membandingkan semua jenis file berbasis teks. Mereka menghasilkan versi untuk Windows dan Linux.
sumber
Kami SD Cerdas Differencer membandingkan dokumen berdasarkan struktur sebagai lawan tata letak yang sebenarnya.
Ada XML Smart Differencer. Untuk XML, itu artinya mencocokkan urutan tag dan konten. Perlu dicatat bahwa string teks dalam fragmen spesifik yang Andaindikasikan berbeda. Itu saat ini tidak memahami gagasan XML atribut tag yang menunjukkan apakah spasi putih dinormalisasi vs signifikan.
sumber
Tidak yakin apakah (ketergantungan) alat online dianggap sebagai solusi tetapi, untuk apa nilainya, saya mendapat hasil yang baik dalam alat perbandingan XML online ini . Itu hanya bekerja.
sumber