GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu porovnat dva soubory XML?

Jedním přístupem by bylo nejprve převést oba soubory XML na kanonické XML a porovnat výsledky pomocí diff . Například xmllint lze použít ke kanonizaci XML.

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

Nebo jako jednovrstvý.

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

Jukkova odpověď pro mě nefungovala, ale ukazovala na Canonical XML. Ani --c14n ani --c14n11 seřadil atributy, ale našel jsem --exc-c14n přepínač seřadil atributy. --exc-c14n není uveden v manuálové stránce, ale je popsán na příkazovém řádku jako "exkluzivní kanonický formát 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)

Upozornění --exc-c14n odstraní hlavičku xml, zatímco --c14n předpíše hlavičku xml, pokud tam není.


Pokusil jsem se použít odpověď @Jukka Matilainena, ale měl problémy s mezerami (jeden ze souborů byl velký jednořádkový). Pomocí --format pomáhá přeskočit rozdíly mezi mezerami.

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

Poznámka:Použijte vimdiff příkaz pro porovnání xmls vedle sebe.


Linux
  1. Jak spojit dva textové soubory v Linuxu

  2. Jak najít soubory s určitou podcestou?

  3. Jak mohu s ohledem na dva adresářové stromy zjistit, které soubory se liší obsahem?

  1. Jak sloučit dva soubory pomocí AWK?

  2. Ručně sloučit dva soubory pomocí diff

  3. Jak porovnat pouze první řádek dvou souborů?

  1. Jak porovnat obsah dvou tarballů

  2. Jak získat rozdíl (pouze doplňky) mezi dvěma soubory v linuxu

  3. Jak mohu vyloučit soubory ve výchozím nastavení pomocí rsync?