In diesem Moment verwalte ich eine Software, die mehrere XML-Konfigurationsdateien hat. Wenn eine neue Version der Software veröffentlicht wird, ändern sich manchmal die Basiskonfigurationsdateien, wir haben derzeit beim Start den Softwareruf KDiff. Wenn eine Änderung festgestellt wird, wird der Benutzer aufgefordert, die Änderungen auszuwählen.Programmatic XML Diff/Zusammenführen in C#
Das Problem bei diesem Ansatz ist, dass KDiff eine Linie zu vergleichen Programm ist und nicht über die Möglichkeiten von XML (wie Knoten, etc.)
Im Idealfall würde Ich mag programmatisch mit einer Bibliothek in C# arbeiten (Da wir ein MS-Shop sind), der zwei XML-Dateien vergleichen kann: eine Quell-XML und eine aktuelle Arbeits-XML.
Und dann verschmelzen die beiden zusammen ein paar einfache Regeln:
- Wenn die aktuelle XML-Arbeits einen Knoten hat, dass die Quelle XML nicht, es zu entfernen.
- Wenn die Quell-XML einen Knoten enthält, den die aktuelle Arbeits-XML nicht enthält, fügen Sie sie hinzu.
- Wenn beide denselben Knoten haben und die Werte unterschiedlich sind, bevorzugen Sie den Wert der Quell-XML, es sei denn, der Wert der Quell-XML ist auf "UseExistingValue" eingestellt.
Zum Beispiel, hier ist die "Quelle" XML:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="UseExistingValue" Y="UseExistingValue" Z="UseExistingValue" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
Und hier ist die "Current Working" XML:
<Configuration>
<Items>
<Item Id="1" Position="false">
<Location X="123" Y="234" Z="345" />
<Another/>
<Something/>
</Item>
</Items>
</Configuration>
Und das fusionierte Version würde wie folgt aussehen:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="123" Y="234" Z="345" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
Ich habe mir die MS XML Diff and Patch Tool angesehen und es defini Sie fügt die Dateien zusammen, erlaubt aber nicht die programmatischen Regeln, die ich definieren möchte.
XMLUnit for Java devs scheint vielversprechend, aber die .NET-Version davon scheint unterentwickelt, was bedauerlich ist.
Jeder hat irgendwelche Vorschläge für entweder skriptfähige XML-Diff/Merge-Tools und/oder .NET-Bibliotheken (kostenpflichtig oder kostenlos)?
Danke.
installieren XMLDiffPatch von NuGet finden Sie unter http: //www.nuget.org/packages/XMLDiffPatch/ – Contango