現在、私は複数のXML設定ファイルを持つソフトウェアを管理しています。新しいバージョンのソフトウェアがリリースされると、基本設定ファイルが変更されることがあります。現在、起動時にKDiffというソフトウェアコールがあります。変更が検出された場合は、ユーザーに変更の選択を求めるプロンプトが表示されます。C言語でのプログラムのXML差分/マージ
このアプローチの問題は、KDiffは(
理想的には(ノードなどのように)、私はプログラム的にC#でのライブラリで作業したいラインの比較プログラムおよびXMLの方法を認識していないということです私たちはMSショップであるため)、ソースXMLと現在の作業XMLの2つのXMLファイルを比較できます。
そして二つが一緒にいくつかの簡単なルールを使用してマージ:
- を現在の作業XMLは、ソースXMLは、それを削除しないノードを持っている場合。
- ソースXMLに現在の作業XMLにないノードがある場合は、それを追加します。
- 両方ともノードが同じで値が異なる場合は、ソースXMLの値が "UseExistingValue"に設定されていない限り、ソースXMLの値を優先します。たとえば、
、ここでは "ソース" XMLです:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="UseExistingValue" Y="UseExistingValue" Z="UseExistingValue" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
そしてここでは、 "現在の作業" XMLです:
<Configuration>
<Items>
<Item Id="1" Position="false">
<Location X="123" Y="234" Z="345" />
<Another/>
<Something/>
</Item>
</Items>
</Configuration>
そして、マージされたバージョンは、次のようになります。
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="123" Y="234" Z="345" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
私はMS XML Diff and Patch Toolを見てきました。ファイルをまとめてマージしますが、私が定義したいプログラム上のルールは許されません。
XMLUnit for Java devsが有望だと思われますが、.NET版のものは未発達のようですが、残念です。
誰でも、スクリプト可能なXML Diff/Mergeツールや.NETライブラリ(有料または無料)のいずれかの提案がありますか?
ありがとうございました。
NuGetからXMLDiffPatchをインストールするには、HTTPを参照してください。 //www.nuget.org/packages/XMLDiffPatch/ – Contango