2009-01-21 1 views
1

J'ai deux fichiers XML. Ils sont similaires, mais il existe deux nœuds dont l'un ou l'autre n'a qu'un seul. Je veux fusionner deux ensembles de tels documents dans un seul document où d'abord le noeud du côté A est pris, suivi par les noeuds du côté B.Ajouter les deux côtés de diff à fusionner

Je ne suis pas un utilisateur expérimenté des outils de diff et j'ai téléchargé KDiff3 pour commencer quelque part .. Quelqu'un peut-il me mettre sur le bon chemin?

--EDIT--
Finding diff tools est quelque chose que je peux gérer moi-même.
Mais comment faire un de ces outils (peu importe lequel) faire la fusion aller automatiquement en mettant d'abord dans la partie de fichier1, puis de fichier2 est ce que je cherche. C'est une quantité assez importante de fichiers, donc je n'aurais de préférence aucune intervention dans le processus de fusion.

Répondre

1

Cela peut être très problématique avec un outil de comparaison standard si les "nœuds" xml sont similaires. Par exemple:

fichier1:

1 <node id="1" /> 
2 <node id="2a"> 
3 <content item="1"/> 
4 <content item="2a"/> 
5 </node> 
6 <node id="3" /> 

fichier2:

1 <node id="1" /> 
2 <node id="2b"> 
3 <content item="1"/> 
4 <content item="2b"/> 
5 </node> 
6 <node id="3" /> 

Un outil standard diff va mettre en évidence les lignes 2 et 4 comme ayant besoin d'être fusionnés, mais même si vous ajoutez automatiquement lignes de fichier2, vous vous retrouverez avec un fichier XML non valide:

1 <node id="1" /> 
2 <node id="2a"> 
2 <node id="2b"> 
3 <content item="1"/> 
4 <content item="2a"/> 
4 <content item="2b"/> 
5 </node> 
6 <node id="3" /> 

vous avez vraiment besoin d'un diff/outil de fusion c'est xml-aware. J'ai trouvé une description d'un appelé XmlMerge, avec un exemple qui montre exactement ce que vous demandez. Cela fait partie de EL4J.

Il y a un effort dormant appelé XUpdate qui a une bonne quantité d'outils autour de lui (à la fois pour générer les diffs XUpdate et pour les appliquer). Il y a aussi quelques .net classes qui utilisent une fondation différente.Vous aurez besoin de faire des scripts pour utiliser l'un de ces systèmes, je pense.

+0

merci pour la recherche. En ce moment, j'ai déjà mis beaucoup de temps dans la recherche, je me suis dit que je pouvais aussi bien écrire une petite application C# rapide. Il s'est avéré que j'avais tout écrit en moins de 5 minutes: P Post est utile pour les futurs ref. THX –

0

KDiff3 peut mettre les deux versions d'entrée dans le fichier de sortie. Il y a des boutons étiquetés A et B. Vous pouvez cliquer sur l'un d'eux pour mettre une version au résultat fusionné. Ou vous pouvez cliquer sur les deux et les deux versions seront incluses. L'ordre de cliquer sur ces boutons influencera l'ordre des rangées insérées.

Il peut également fusionner des répertoires entiers.

Le seul problème semble être lié à l'automatisation.

Les raccourcis clavier de KDiff3 peuvent être configurés de manière assez riche, donc j'essaierais de regarder ici et ensuite j'utiliserais peut-être une application de script de clavier.

Il peut y avoir une autre façon plus simple, :-)

+0

Y at-il un moyen que je puisse faire le programme le faire pour moi automatiquement? Je ne veux pas cliquer sur les boutons pour tous ces fichiers ... –

1

Cela ressemble plus à un logiciel pour créer, puis le logiciel pour trouver.

Si vous obtenez le vôtre, vous pouvez ajouter des vérifications supplémentaires que les deux XML sont valides.

+0

Hmm, j'ai cherché si longtemps que j'aurais pu écrire un rapide et sale déjà: S Bizarre, j'aurais pensé que c'était plutôt chose simple à faire .. mais apparemment, ce n'est pas. –