我的任务是创建一个可以为我公司的产品区分和合并配置文件的工具。配置存储为XML或URL编码的字符串。我正在寻找一个库,最好是开源的,具有与商业软件兼容的许可证,可以做这些差异。我们的应用程序是用C ++编写的,所以C ++库是最好的,但是我愿意看看C#特有的库,因为我可以编写一个通过COM将它暴露给C ++的包装器。三向差异是理想的,但双向是可以接受的。如果它对XML有所了解,那也是一个优点(因为XML节点可以在不更改文档的情况下重新排序等)。任何图书馆建议?我是否应该考虑编写自己的差异工具,以期为我们的格式提供语义知识?
感谢this similar question,我已经发现了this google library,这看起来真的很棒,但我仍在寻找其他选择。它似乎也能够以HTML格式输出差异(使用我发现之前我不知道存在的<ins>
和<del>
标签),这可能非常方便,但似乎只是一个统一的差异。我将需要在Web浏览器中显示结果,并且可能还需要构建一个用于在浏览器中进行合并的界面。我不希望图书馆能够帮助完成这些任务,但它必须以适合我在其上构建它的格式生成输出。我目前正在设想一些与TortoiseMerge(并排差异,不统一)相似的东西,除了基于浏览器的东西。关于如何呈现这一点的任何提示/技巧/设计理念也将受到赞赏。
答案 0 :(得分:3)
Subversion附带了libsvn_diff
和libsvn_delta
在Apache软件许可下的许可。
答案 1 :(得分:2)
Here是一个C ++库,可以区分作者所谓的半结构化数据。它很好地处理HTML和XML。由于您的数据是XML,因此使用它而不是纯文本差异会很有意义。当文件是机器生成时尤其如此。
我目前正在尝试使用此库来构建一个差异Visual Studio项目文件的工具。这些基本上是XML文件,并且使用像Winmerge这样的普通差异工具太痛苦了,因为Visual Studio通过疯狂的重新排序几乎完全破坏了整个文件。我们的想法是做一些结构化差异来解决问题。
答案 2 :(得分:1)
为了区分XML,我建议你首先对它进行规范化:按字母顺序对所有元素进行排序,然后生成代表原始文档但与原始格式无关的标记/ xml流。运行diff之后,解析结果以获得包含添加/删除内容的树。