GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso differenziare due file XML?

Un approccio potrebbe essere quello di trasformare prima entrambi i file XML in Canonical XML e confrontare i risultati utilizzando diff . Ad esempio, xmllint può essere utilizzato per canonizzare XML.

$ xmllint --c14n one.xml > 1.xml
$ xmllint --c14n two.xml > 2.xml
$ diff 1.xml 2.xml

O come one-liner.

$ diff <(xmllint --c14n one.xml) <(xmllint --c14n two.xml)

La risposta di Jukka non ha funzionato per me, ma indicava Canonical XML. Né --c14n--c14n11 ho ordinato gli attributi, ma ho trovato --exc-c14n switch ha ordinato gli attributi. --exc-c14n non è elencato nella pagina man, ma descritto nella riga di comando come "formato canonico esclusivo 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)

Avviso --exc-c14n rimuove l'intestazione xml mentre --c14n antepone l'intestazione xml se non è presente.


Ho provato a usare la risposta di @Jukka Matilainen ma ho avuto problemi con gli spazi bianchi (uno dei file era un enorme one-liner). Usando --format aiuta a saltare le differenze degli spazi bianchi.

xmllint --format one.xml > 1.xml  
xmllint --format two.xml > 2.xml  
diff 1.xml 2.xml  

Nota:usa vimdiff comando per il confronto affiancato degli xml.


Linux
  1. Dati due alberi di directory, come posso scoprire quali file differiscono per contenuto?

  2. Come unire due file usando AWK?

  3. Come ottenere la differenza (solo aggiunte) tra due file in Linux

  4. Unisci manualmente due file usando diff

  5. Come unire due file CSV?

Come modificare i file di configurazione su Ubuntu

Come visualizzare due file affiancati in Linux

Come confrontare due file nel terminale Linux

Come trovare file con un determinato sottopercorso?

come posso differenziare due sezioni dello stesso file?

Come posso vedere contemporaneamente due file tex in TeXstudio?