J'ai deux fichiers ont les mêmes données mais dans des lignes différentes.
Fichier 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>
Fichier 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 j'utilise la diff file1 file2
commande, je reçois ci-dessous la réponse:
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>
Mais je n'ai besoin de faire aucune différence, car ces fichiers ont les mêmes données sur des lignes différentes.
bash
shell
xml
file-comparison
user32026
la source
la source
xmldiff
, mais je pense que vous remarquerez toujours que l'ordre change, car l'ordre est pertinent dans le XML générique. Je pense que votre meilleure approche est d'utiliser un analyseur et un générateur XML pour mettre chaque fichier dans un ordre et un format canoniques, puis utiliserxmldiff
oudiff
. Un travail pour votre langage de script préféré (Perl, Ruby, Python, etc.).Réponses:
Vous pouvez réaliser ce que vous voulez à l'aide d'un petit script Python (vous aurez besoin de Python installé, ainsi que de la
lxml
boîte à outils).tagsort.py
:Ce script trie les éléments de premier niveau sous la racine du document XML en fonction du contenu d'un élément de second niveau, en envoyant le résultat à stdout. Cela s'appelle comme ceci:
Une fois que vous avez cela, vous pouvez utiliser la substitution de processus pour obtenir un diff basé sur sa sortie (j'ai ajouté un élément et changé un autre dans vos fichiers d'exemple pour afficher un résultat non vide):
la source
J'ai eu un problème similaire et j'ai finalement trouvé: /superuser/79920/how-can-i-diff-two-xml-files
Ce post suggère de faire un tri canonique xml puis de faire un diff. Les éléments suivants devraient fonctionner pour vous si vous êtes sous linux, mac ou si vous avez installé quelque chose comme cygwin:
la source
C'est un shell tagué, mais honnêtement, je préfère utiliser un langage de script avec un analyseur. Dans ce cas
perl
avecXML::Twig
.Ca fait plutot comme ca:
Je compare explicitement un élément 'Identity' à la fois et vérifie que tous les champs de l'un existent dans l'autre, avec la même valeur.
Et puis inverser cela, car le deuxième fichier peut avoir des entrées supplémentaires.
la source