Salah satu pendekatannya adalah dengan terlebih dahulu mengubah kedua file XML menjadi Canonical XML, dan membandingkan hasilnya menggunakan diff
. Misalnya, xmllint dapat digunakan untuk mengkanoniskan XML.
$ xmllint --c14n one.xml > 1.xml
$ xmllint --c14n two.xml > 2.xml
$ diff 1.xml 2.xml
Atau sebagai one-liner.
$ diff <(xmllint --c14n one.xml) <(xmllint --c14n two.xml)
Jawaban Jukka tidak berhasil untuk saya, tetapi itu mengarah ke Canonical XML. Baik --c14n maupun --c14n11 mengurutkan atribut, tetapi saya menemukan --exc-c14n switch memang mengurutkan atribut. --exc-c14n tidak terdaftar di halaman manual, tetapi dijelaskan di baris perintah sebagai "format kanonik eksklusif W3C".
$ xmllint --exc-c14n one.xml > 1.xml
$ xmllint --exc-c14n two.xml > 2.xml
$ diff 1.xml 2.xml
$ xmllint | grep c14
--c14n : save in W3C canonical format v1.0 (with comments)
--c14n11 : save in W3C canonical format v1.1 (with comments)
--exc-c14n : save in W3C exclusive canonical format (with comments)
$ rpm -qf /usr/bin/xmllint
libxml2-2.7.6-14.el6.x86_64
libxml2-2.7.6-14.el6.i686
$ cat /etc/system-release
CentOS release 6.5 (Final)
Peringatan --exc-c14n menghapus header xml sedangkan --c14n menambahkan header xml jika tidak ada.
Mencoba menggunakan jawaban @Jukka Matilainen tetapi mengalami masalah dengan spasi putih (salah satu file berukuran besar). Menggunakan --format
membantu melewati perbedaan ruang kosong.
xmllint --format one.xml > 1.xml
xmllint --format two.xml > 2.xml
diff 1.xml 2.xml
Catatan:Gunakan vimdiff
perintah untuk membandingkan xml secara berdampingan.