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 file2
comando 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 usexmldiff
odiff
. 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
lxml
kit 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
perl
conXML::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