对 XML 文件进行排序,以便可以找到差异

Ric*_*ich 10 xml diff sorting

我需要比较两个 XML 文件,每个文件大约有 13,000 行。

遗憾的是,生成这些文件的代码每次都不会以相同的顺序生成数据(数据来自数据库)。

因此,即使在规范化 XML 文件之后,我在使用标准的逐行差异实用程序 (WinMerge) 时也会得到误报。

作为我的问题的一个例子:

文件 1:

<a>
  <b key="fruit.preferred">banana</b>
  <b key="fruit.available">pineapple</b>
  <b key="fruit.available">apple</b>
  <b key="fruit.available">orange</b>
</a>
Run Code Online (Sandbox Code Playgroud)

文件2:

<a>
  <b key="fruit.available">pineapple</b>
  <b key="fruit.preferred">banana</b>
  <b key="fruit.available">apple</b>
  <b key="fruit.available">orange</b>
</a>
Run Code Online (Sandbox Code Playgroud)

这些文件具有相同的内容,但是香蕉线的位置意味着它们被传统的diff认为是不同的。是否有任何工具可以执行排序以使文件被视为相同?

顺便说一下,XML 文件结构比上面的例子更复杂!

小智 2

我认为您可以使用 xmldiff 等工具来实现此目的。

http://diffxml.sourceforge.net/

在工具网页上它指出:

标准 Unix 工具 diff 和 patch 用于查找文本文件之间的差异并应用差异。这些工具使用经过充分研究的方法逐行运行来计算最长公共子序列 (LCS)。

在分层结构数据(XML 等)上使用这些工具会导致次优结果,因为它们无法识别这些文件的基于树的结构。