目前,我正在管理一个具有多个 XML 配置文件的软件。当新版本的软件发布时,有时基本配置文件会发生变化,我们目前有软件在启动时调用KDiff。如果它检测到更改,它会提示用户选择更改。
这种方法的问题是 KDiff 是一个行比较程序并且不知道 XML 的方式(如节点等)
理想情况下,我想以编程方式使用 C# 中的库(因为我们是一家 MS 商店),它可以区分两个 XML 文件:源 XML 和当前工作 XML。
然后使用一些简单的规则将两者合并在一起:
- 如果当前工作 XML 具有源 XML 没有的节点,则将其删除。
- 如果源 XML 具有当前工作 XML 没有的节点,则添加它。
- 如果两者具有相同的节点并且值不同,则优先使用 Source XML 的值,除非 Source XML 的值设置为“UseExistingValue”。
例如,这里是“源”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,它确实将文件合并在一起,但不允许我想要定义的编程规则。
用于 Java 开发人员的 XMLUnit似乎很有希望,但它的 .NET 版本似乎不发达,这是不幸的。
有人对可编写脚本的 XML Diff/Merge 工具和/或 .NET 库(付费或免费)有任何建议吗?
谢谢。