Saltar al contenido

¿Cómo puedo diferenciar dos archivos XML?

Solución:

Un enfoque sería convertir primero ambos archivos XML en XML canónico y comparar los resultados utilizando diff. Por ejemplo, xmllint se puede utilizar para canonicalizar XML.

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

O como una sola línea.

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

La respuesta de Jukka no funcionó para mí, pero apuntó a Canonical XML. Ninguno –c14n ni –c14n11 ordené los atributos, pero encontré el –exc-c14n Switch ordenó los atributos. –exc-c14n no aparece en la página del manual, pero se describe en la línea de comando como “formato canónico exclusivo de 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)

Advertencia –exc-c14n elimina el encabezado xml mientras que –c14n antepone el encabezado xml si no está allí.

Intenté usar la respuesta de @Jukka Matilainen, pero tuve problemas con los espacios en blanco (uno de los archivos era una gran frase de una sola línea). Utilizando --format ayuda a omitir las diferencias de espacios en blanco.

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

Nota: Utilice vimdiff comando para la comparación lado a lado de xmls.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *