【问题标题】:Tool or library for comparing xml files [closed]用于比较 xml 文件的工具或库 [关闭]
【发布时间】:2009-02-13 19:47:09
【问题描述】:

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

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

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


(来源:a7soft.com

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


更新:

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

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

【问题讨论】:

  • 请澄清更多 - 在您的示例中,假定的差异工具应该产生什么输出?
  • 谁对这个问题的所有答案投了反对票?很幼稚。
  • 我自己投票赞成其中的一些,因为我觉得提到的所有实用程序都是高质量的应用程序,非技术人员可以通过一些培训来处理。
  • 我已经在 .NET 中实现了 1/2 的解决方案(目前合并 XML 文件,但其中一部分是区分它们以查看要合并的内容)。如果您想更好地定义输出,我可以一次性完成您想要的副本:仅图形或文本?命令行还是赢? *nix、win 还是 mac?
  • 我很欣赏您的报价 rally25rs,但我正在寻找更多现成的东西。

标签: xml comparison content-management


【解决方案1】:

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

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

(如果屏幕截图有点宽,请见谅)。

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

【讨论】:

  • 您能告诉我如何使用比较功能吗?谢谢。
  • 当然。打开一个 xml 文件,然后转到“查看”菜单并单击“比较 XML 文件”
  • 我刚刚试用了 XMLNotepad,发现它非常有趣。谢谢你的建议。
  • 刚试了XML记事本,好像有点bug。 xml 文件中的行(使用 vi 读取)为 但 XML 记事本中的差异显示为 .数字 0.000729 在文件中是唯一的,所以我很肯定我看到了相同的元素。
  • 我同意,XML Notepad 不再更新,并且充满了错误,尤其是在扩展或关闭层次结构时。如果我必须使用它,我可以,但是那里有更强大和设计更好的工具。
【解决方案2】:

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

【讨论】:

  • 对 XML 敏感吗?我不这么认为,我相信它只是将它们视为纯文本文件,因此会发现 XML 信息集中不存在的差异(例如编码更改)。
  • 你是对的——它唯一的文本比较。
【解决方案3】:

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

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

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

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

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

【讨论】:

  • 谢谢约翰,这是迄今为止最好的答案。
  • 图片在被删除之前是什么?截图?
  • @JirkaHanika 是的。不知道为什么它就这样消失了。
【解决方案4】:

SourceGear 的 DiffMerge 对单用户免费:

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

【讨论】:

  • 确保将首选项设置为仅显示差异。
【解决方案5】:

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

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

【讨论】:

  • 这看起来是一个不错的解决方案,尽管价格昂贵(每位用户 500 美元)。
【解决方案6】:

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

【讨论】:

    【解决方案7】:

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

    就您对用户的非技术能力的评论而言:

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

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

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

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

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

        【讨论】:

          【解决方案10】:

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

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

          【讨论】:

          • 感谢您的链接。我在一些用户想要的文件上运行了该实用程序,比较输出是一种很好的格式。不幸的是,它不准确地将某些 xml 标记为不同。
          【解决方案11】:

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

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

          【讨论】:

          • 我已经对此进行了测试,它简单地输出了错误的结果。
          【解决方案12】:

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

          【讨论】:

            【解决方案13】:

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

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

            【讨论】:

              猜你喜欢
              • 2012-01-25
              • 1970-01-01
              • 2010-09-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-12-13
              • 2023-03-24
              相关资源
              最近更新 更多