現在、私は複数のXML構成ファイルを持つソフトウェアを管理しています。新しいバージョンのソフトウェアがリリースされると、基本構成ファイルが変更されることがあります。現在、ソフトウェアは起動時にKDiffを呼び出します。変更を検出すると、ユーザーに変更を選択するように求めます。
このアプローチの問題は、KDiffが行比較プログラムであり、XMLの方法(ノードなど)を認識していないことです。
理想的には、2つのXMLファイル(ソースXMLと現在動作中のXML)を差分できるC#のライブラリ(私たちはMSショップなので)をプログラムで操作したいと思います。
次に、いくつかの簡単なルールを使用して2つをマージします。
- 現在動作している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>
私はMSXMLDiff and Patch Toolを見てきましたが、ファイルを確実にマージしますが、定義したいプログラム規則は許可されていません。
XMLUnit for Java開発者は有望なようですが、.NETバージョンは未開発のようです。これは残念なことです。
スクリプト化可能なXMLDiff/ Mergeツールおよび/または.NETライブラリ(有料または無料)のいずれかについて何か提案がありますか?
ありがとう。