【问题标题】:3-way XML merge algorithm3路XML合并算法
【发布时间】:2026-01-07 19:05:02
【问题描述】:

我希望能够对 XHTML 文档进行 3 路合并:

  1. 从文档的一些原始副本开始
  2. 一位用户编辑原始文档的副本
  3. 另一个用户编辑原始文档的单独副本
  4. 需要一个工具来合并(自动和/或可视化)两个用户所做的更改。

注意:

  • 我想将此功能包含在商业软件中:因此我更喜欢像啤酒一样免费和/或开源的东西,而不是商业工具。
  • 我怀疑如果该工具能够识别 XML,比尝试使用像 diff3 这样实现平面文本的 3 路合并的软件更好
  • 鉴于所有三个输入文档都是有效的 XHTML 文档,因此生成的输出文档也应该验证

我找到的工具包括:

  1. The "3DM" XML 3-way Merging and Differencing Tool
  2. Fuego Core XML Diff and Patch Tool
  3. XmlDiff(最近来自已关闭的 GotDotNet 站点,但它可能作为 XML Notepad 的一个组件继续存在)

上述第一个(即“3DM”)明确表示它实现了 3 路合并。

我不知道其他两个:“diff”后跟“patch”是否等效于 3 路合并,或者“patch”是否只能将 diff 重新应用于原始文件(而不是第三份,修改后的文件副本)

您能否为此目的推荐一些软件(来自上面的列表或其他地方),和/或合并算法的描述?


编辑:Matching, diffing and merging XML 是 2008 年的另一篇文章,其中包括对各种算法的简要调查以及对各种实现的引用。


编辑#2:作者确认Fuego Core XML Diff and Patch Tool只能对原文件打补丁,不实现3路合并。

【问题讨论】:

    标签: xml xhtml merge diff


    【解决方案1】:

    恐怕我没有免费的解决方案,但Project: Merge 是一个廉价的 XML 比较和合并工具,可以通过命令行进行控制。它可能会直接插入您的应用程序。

    【讨论】:

    • 它可能不是免费的,但每个许可证 19 欧元也可能是免费的。一个整洁的小工具,不,他们不会付钱让我这么说:)
    • 这是我见过的最好的工具。不过,他们已经对其进行了更新并将其重命名为Oso XML Merge。谢谢!
    【解决方案2】:

    我可以将 DeltaXML 添加到您的收藏中 - 他们不主张 diff3,但值得考虑。

    【讨论】:

    【解决方案3】:

    一个免费的选择是做

    $ xmlstarlet fo before.xml > before.xml
    $ xmlstarlet fo after.xml > after.xml
    

    然后做

    $ diff before.xml after.xml
    

    创建一个XML差异的补丁。它免费且简单。

    【讨论】: