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:

  1. Si le Travail en cours XML a un nœud de la Source XML ne supprimez pas, c'.
  2. Si la Source XML a un nœud que le Travail en cours XML ne pas l'ajouter.
  3. 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