【发布时间】:2012-12-29 18:33:27
【问题描述】:
此时,我正在管理一个具有多个 XML 配置文件的软件。当新版本的软件发布时,有时基本配置文件会发生变化,我们目前在启动时会调用软件KDiff。如果检测到更改,则会提示用户选择更改。
这种方法的问题是KDiff是一个行比较程序,不知道XML的方式(如Nodes等)
理想情况下,我想以编程方式使用 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,它确实将文件合并在一起,但不允许我想要定义的编程规则。
XMLUnit for Java devs 看起来很有希望,但它的 .NET 版本似乎不发达,这很不幸。
有人对可编写脚本的 XML Diff/Merge 工具和/或 .NET 库(付费或免费)有任何建议吗?
谢谢。
【问题讨论】: