Diff XML / fusion XML programmatique en C #
En ce moment, je suis de la gestion d'un morceau de logiciel qui dispose de plusieurs fichiers de configuration XML. Lorsqu'une nouvelle version de logiciel est lancé, parfois à la base des fichiers de configuration de changement, nous avons actuellement le logiciel appel KDiff au démarrage. Si elle détecte un changement, il invite l'utilisateur à choisir les modifications.
Le problème avec cette approche est que KDiff est une ligne de la comparaison de programme et ne sont pas au courant des façons de XML (comme les Nœuds, etc.)
Idéalement, j'aimerais travailler par programmation avec une bibliothèque en C# (puisque nous sommes un MS de la boutique) qui peuvent Diff de deux fichiers XML: XML Source et d'un Travail en cours XML.
Et puis de Fusionner les deux ensemble à l'aide de quelques règles simples:
- Si le Travail en cours XML a un nœud de la Source XML ne supprimez pas, c'.
- Si la Source XML a un nœud que le Travail en cours XML ne pas l'ajouter.
- Si les deux ont le même nœud et les valeurs diffèrent, en faveur de l'XML Source de la valeur, à moins que la Source XML la valeur "UseExistingValue".
Par exemple, voici la "Source" XML:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="UseExistingValue" Y="UseExistingValue" Z="UseExistingValue" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
Et voici le "Travail en cours" XML:
<Configuration>
<Items>
<Item Id="1" Position="false">
<Location X="123" Y="234" Z="345" />
<Another/>
<Something/>
</Item>
</Items>
</Configuration>
Et la version fusionnée ressemblerait à:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="123" Y="234" Z="345" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
J'ai regardé le MS XML Diff et Patch Outil et il a certainement fusionne les fichiers ensemble, mais ne permet pas pour les programmes et les règles que je veux définir.
XMLUnit pour les devs Java semble prometteur, mais l' .La version NET de il semble peu développé, ce qui est regrettable.
Quelqu'un a des suggestions pour des scripts XML Diff/Merge et/ou outils .Bibliothèques NET (payant ou gratuit)?
Grâce.
source d'informationauteur Pretzel | 2013-01-15
Vous devez vous connecter pour publier un commentaire.
Après quelques jours de déconner, j'ai trouvé une solution qui je pense fonctionne pour moi. Peut-être que ça pourrait fonctionner pour d'autres personnes aussi bien.
Le MS XML Diff et Patch outil était une option viable. Lorsque vous Diff premier contre le second fichier, il crée un fichier XML "DiffGram" liste des changements qu'il a détecté entre les deux fichiers XML.
Pour prendre soin de tous les 3 règles que j'ai énuméré ci-dessus, j'Diff avais les deux fichiers dans un sens, puis a ouvert le DiffGram fichier à l'aide de Linq-to-XML et Supprimé tous les "Ajouter" et "Supprimer" des lignes.
Puis j'ai patché (fusionné) cette édité diffgram contre le premier fichier et créé un partiellement fusionné fichier temporaire. Il s'occupe des Règles 1 et 2.
Prochaine, je Diff d le partiellement fichier fusionné contre le premier fichier utilisé. Puis a ouvert la nouvelle DiffGram et supprimé tous Changer les références à "UseExistingValue".
Et de fusion de cette édité DiffGram contre l'partiellement fusionné fichier qui prend soin de la Règle 3. L'enregistrement de cette sortie au format XML puis génère le XML final fusionnés selon les règles définies ci-dessus.
J'espère que cela peut aider d'autres personnes.
ASTUCE: Après l'installation de la XmlDiffPatch de la bibliothèque, le XmlDiffPatch DLL peuvent être trouvés dans C:\Windows\assembly\GAC\XmlDiffPatch\1.0.8.28__b03f5f7f11d50a3a\XmlDiffPatch.dll