我需要比较两个 XML 文件,每个文件大约有 13,000 行。
遗憾的是,生成这些文件的代码每次都不会按照相同的顺序生成数据(数据来自数据库)。
因此,当我使用标准的逐行比较实用程序 (WinMerge) 时,我得到的是误报,即使在规范化 XML 文件。
作为我的问题的一个例子:
文件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>
文件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>
这些文件的内容相同,但是香蕉线的位置使得它们在传统 diff 中被视为不同。是否有任何工具可以执行排序以使文件被视为相同?
顺便说一句,XML 文件结构比上面的例子更复杂!
答案1
我认为您可以使用诸如 xmldiff 之类的工具来实现此目的。
http://diffxml.sourceforge.net/
工具网页上显示:
标准 Unix 工具 diff 和 patch 用于查找文本文件之间的差异并应用差异。这些工具逐行操作,使用经过充分研究的方法来计算最长公共子序列 (LCS)。
在分层结构数据(XML 等)上使用这些工具会导致次优结果,因为它们无法识别这些文件的基于树的结构。