如何构建HTML差异/补丁算法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (68)

描述我将要完成的事情:

  • 输入2(N不是必需的)HTML文档。
  • 标准化HTML格式
  • 区分这两个文档 - 外部样式不重要,但包含文档内嵌的任何内容。
  • 在HTML块元素级别确定增量。

扩大最后一点:

想象一下,同一个网站的两个页面与共享一个可能是已被复制/粘贴的共同祖先的边栏共享一个边栏。每个页面都有一些对侧边栏的小改动。差异会揭示这些变化,然后我可以“走上”DOM找到他们共享的第一个公共块元素,或者只是默认为<body>。在这种情况下,我想把它放在一起,发现它们有共同之处<div id="sidebar">

我对DaisyDiff很熟悉,应用程序类似 - 在CMS世界中。

我也开始玩谷歌diff-patch库。

我想提出这样一个非具体的问题,希望能够征求任何人认为可能有用的建议或指导。

提问于
用户回答回答于

如果打算从头开始,一个有用的搜索词将是“树差异”。

有一个博客张贴在这里,但我只是觉得通过谷歌搜索“daisydiff”,所以我敢打赌,已经看过了。除了所有有趣的理论内容之外,他还提到了Logilab的xmldiff存在,这是一种用Python编写的开源XML差异。这可能是一个不错的起点 - 也许比试图包装或重新实现DaisyDiff更不正确,但可能更容易快速启动和运行。

关于树的有效差异算法和 cstheory.stackexchange上的Levenshtein距离,有一些理论性的东西。

顺便说一句,只是为了澄清,在谈论差异化两棵DOM树,但不一定将差异/合并渲染回任何特定的HTML。

用户回答回答于

我知道这个问题与python有关,但可以看一下3DM-XML 3-way合并和差异化工具(在java中的默认实现),缺点是必须清理文档并能够将其作为XML进行分析。

扫码关注云+社区

领取腾讯云代金券