Tengo dos archivos con los mismos datos pero en líneas diferentes.
Archivo 1:
<Identities>
<Identity>
<Id>048206031415072010Comcast.USR8JR</Id>
<UID>ccp_test_79</UID>
<DisplayName>JOSH CCP</DisplayName>
<FirstName>JOSH</FirstName>
<LastName>CCP</LastName>
<Role>P</Role>
<LoginStatus>C</LoginStatus>
</Identity>
<Identity>
<Id>089612381523032011Comcast.USR1JR</Id>
<UID>94701_account1</UID>
<DisplayName>account1</DisplayName>
<FirstName>account1</FirstName>
<LastName>94701</LastName>
<Role>S</Role>
<LoginStatus>C</LoginStatus>
</Identity>
</Identities>
Archivo 2:
<Identities>
<Identity>
<Id>089612381523032011Comcast.USR1JR</Id>
<UID>94701_account1</UID>
<DisplayName>account1</DisplayName>
<FirstName>account1</FirstName>
<LastName>94701</LastName>
<Role>S</Role>
<LoginStatus>C</LoginStatus>
</Identity>
<Identity>
<Id>048206031415072010Comcast.USR8JR</Id>
<UID>ccp_test_79</UID>
<DisplayName>JOSH CCP</DisplayName>
<FirstName>JOSH</FirstName>
<LastName>CCP</LastName>
<Role>P</Role>
<LoginStatus>C</LoginStatus>
</Identity>
</Identities>
Si uso el diff file1 file2comando obtengo la siguiente respuesta:
1,10d0
< <Identities>
< <Identity>
< <Id>048206031415072010Comcast.USR8JR</Id>
< <UID>ccp_test_79</UID>
< <DisplayName>JOSH CCP</DisplayName>
< <FirstName>JOSH</FirstName>
< <LastName>CCP</LastName>
< <Role>P</Role>
< <LoginStatus>C</LoginStatus>
< </Identity>
20a11,20
> <Identities>
> <Identity>
> <Id>048206031415072010Comcast.USR8JR</Id>
> <UID>ccp_test_79</UID>
> <DisplayName>JOSH CCP</DisplayName>
> <FirstName>JOSH</FirstName>
> <LastName>CCP</LastName>
> <Role>P</Role>
> <LoginStatus>C</LoginStatus>
> </Identity>
Pero no necesito diferenciar, porque estos archivos tienen los mismos datos en diferentes líneas.
bash
shell
xml
file-comparison
usuario32026
fuente
fuente

xmldiff, pero creo que aún notará que el orden cambia, ya que el orden es relevante en XML genérico. Creo que su mejor enfoque es usar un analizador y generador XML para colocar cada archivo en un orden y formato canónicos, luego usexmldiffodiff. Un trabajo para su lenguaje de secuencias de comandos favorito (Perl, Ruby, Python, etc.).Respuestas:
Puede lograr lo que desea con la ayuda de un pequeño script de Python (necesitará Python instalado, así como el
lxmlkit de herramientas).tagsort.py:Este script clasifica los elementos de primer nivel bajo la raíz del documento XML por el contenido de un elemento de segundo nivel, enviando el resultado a stdout. Se llama así:
Una vez que tenga eso, puede usar la sustitución del proceso para obtener un diferencial basado en su salida (he agregado un elemento y cambiado otro en sus archivos de ejemplo para mostrar un resultado no vacío):
fuente
Tuve un problema similar y finalmente encontré: /superuser/79920/how-can-i-diff-two-xml-files
Esa publicación sugiere hacer una ordenación xml canónica y luego hacer una diferencia. Lo siguiente debería funcionar para usted si está en Linux, Mac o si tiene Windows algo como Cygwin instalado:
fuente
Está etiquetado como shell, pero honestamente prefiero usar un lenguaje de script con un analizador sintáctico. En este caso
perlconXML::Twig.Es algo parecido a esto:
Estoy comparando explícitamente un elemento de 'Identidad' a la vez y verificando que todos los campos en uno existan en el otro, con el mismo valor.
Y luego revertir eso, porque el segundo archivo podría tener entradas adicionales.
fuente