42

我正在寻找一个理解 xml 的 XML 比较工具。它不能像 WinMerge 或 Beyond Compare 那样逐行比较。

一个理想的解决方案是显示更改的方式类似于 Word 2007 显示跟踪更改的方式。 DeltaXML可以做到这一点,但没有“开箱即用”的真正 GUI,每位用户 500 美元!:

ExamXml开箱即用,但以令人困惑的方式显示差异。它没有前后的概念,它只是显示差异:

替代文字
(来源:a7soft.com

该工具应该具有使用属性作为键的概念,这样它就不会认为重新排序的元素列表发生了变化。DeltaXML 会这样做,但我未能为屏幕截图正确设置它。


更新:

到目前为止, ExamlXML是最好的开箱即用解决方案。但它缺乏 DeltaXML 的变更管理概念。导致一些可用性问题。

DeltaXML几乎是我需要的解决方案,但具有更多开箱即用功能的东西会更好。DeltaXML 需要编写 java 代码来调用 api,以及编写 XSL 来将 xml 转换为预期的输入。

4

13 回答 13

18

我很惊讶没有人提到微软的XML NotePad

它是免费的,它可以创建一个很好的比较,告诉哪些元素/属性已经改变、移动、被删除等:

(对不起,如果屏幕截图有点宽)。

您还可以将 XLS 应用到 XML 文件并进行各种编辑操作。很值得一试。

于 2009-02-22T17:21:18.367 回答
14

如果我理解您的问题,您可能有一个使用 XML 文件作为数据存储的应用程序,并且 GUI 将“技术”标签名称抽象为“用户友好”标签 - 我再次假设。因此,以类似的方式看待差异将是一种自然的延伸。我还假设您的应用程序没有遵循“抽象”概念的差异工具。

我进行了一些搜索,发现了一个似乎与突出显示功能接近的应用程序 ( ExamXML )。我下载了 eval 版本并针对它测试了您的文件:

http://www.programmedintheusa.com/images/stack547399.png

它在突出差异方面做得很好。它看起来非常互动,并且弹出了多少差异。看起来你可以改变它使用的颜色,所以也许你可以使用灰色和白色来淡化标签。它似乎也有很多选项,您也可以为您的用户预先设置。

我想指出,您将很难找到一个不会显示标签名称的 XML 比较工具,因为标签是提供内容上下文的东西。如果去掉上下文,就很难理解所显示的数据。无论如何,也许这个工具可能会有所帮助。您是否还尝试向您的用户展示其中一些工具,看看他们愿意容忍什么,有时他们可能会让您感到惊讶。希望这可以帮助!

于 2009-02-18T05:44:22.490 回答
5

SourceGear 的 DiffMerge 对单用户免费:

http://www.sourcegear.com/diffmerge/

于 2009-02-13T19:58:18.137 回答
3

我可能会尝试使用 DeltaXML + XSLT 转换来获得您想要的特定结果。将纯文本比较工具与 XML 结合使用的一个问题是,即使内容本身没有变化,XML 文档的物理形式(其缩进等)也会发生变化,这可能会导致大量误报。DeltaXML 是比较基于文档的 XML 的一个非常好的工具。

此外,根据您的用户使用的编辑器,它可能具有内置的 XML 差异。例如,Arbortext Editor 有一个很好的工具,可以显示文本(而不是标签),其中的更改突出显示/删除。

于 2009-02-17T23:12:31.590 回答
3

Altova diffDog XML Spy 和 diffDog 是出色的工具。从我冰冷的死手上撬开它们,有点东西。

于 2009-02-20T01:16:12.413 回答
2

正如@BobbyShaftoe 已经提到的,Beyond Compare 非常出色。然而,对于合并,我喜欢使用Araxis Merge。我们经常将其用于类似目的。

至于您对用户的非技术能力的评论:

感谢您的回复......但这些似乎都太技术化了。我的用户通常看不到 xml 标记,因为他们的 XML 创作工具将它们抽象出来。是否有任何工具可以显示文本内容的差异,但不显示(或不强调)xml 标签。

我要把它扔在那里:你的用户应该学习。如果您让他们合并和更改 XML 文件——我假设可能用于记录保存或应用程序配置——那么他们应该至少对他们正在做的事情有一个基本的了解。他们不必是 XML 专家也能使用列出的工具并完成工作。

但是,如果要求您的用户对他们正在做的工作有基本的了解是不可能的,那么我建议您自己编写一个配置实用程序并将其交付给您的最终用户,而不是依赖第三方软件。

于 2009-02-13T20:55:51.197 回答
1

试试 Microsoft MSDN XML中的XML Notepad,它有一个比较 XML 文件。不知道它有多好。

于 2009-02-13T19:54:00.270 回答
0

您是否尝试过testdiff?当然,它仍然是一种技术工具,但使用起来很容易。它有一个拖放界面来比较文件。

于 2009-02-13T19:49:51.480 回答
0

我总是使用 kdiff3。它易于使用,最多可以比较 3 个文件。 http://kdiff3.sourceforge.net/

于 2009-02-13T19:53:11.067 回答
0

您可能会发现XML Diff and Patch GUI Tool(MSDN 上的示例代码)更好地满足您的需求:它仍然显示标签,但强调文本的差异。由于您获得了代码,因此您可以更加努力地根据您的要求对其进行定制。

尽管该示例相对较旧(2004 年 7 月,并且起源于 2002 年),但它可以轻松升级到 Visual Studio Express C# 2008。如果/当安装程序 MSI 提到“.NET 代码示例中的 SQLXML Bulkload”时,请不要推迟从 MSDN 站点下载示例- 它不是!

于 2009-02-13T22:23:24.687 回答
0

无论是编程方式还是 UI,您都可以使用 MSDN 中的 XmlDiff、XmlPatch 工具和库。有关其工作原理的详细信息,请查看指南。

http://msdn.microsoft.com/en-us/library/aa302294.aspx

于 2009-02-18T17:44:14.413 回答
0

Oxygen XML Editor 拥有我发现的最好的 XML diff 集合工具。有几种不同的算法可供比较,所以如果默认设置不适合您,请尝试使用 Syntax Aware 或其他一些算法(现在,我使用的是版本 8 并且尚未升级到版本 10,所以 ymmv,但我怀疑XML 差异变得更糟)。

于 2009-02-21T19:47:28.743 回答
0

我知道这是一个过时的线程,但Project: Merge是一个新的 Windows 应用程序,它可以管理 XML 文件的双向和三向合并和比较。(三向操作假设有两个文件都派生自一个公共基础文件。)

您可能需要告诉它如何识别单个元素以完美地处理您的文件,但这很容易做到,而且您只需要做一次。

于 2010-08-28T12:47:53.967 回答