现在我们正试图为我们的环境build立黄金configuration。 我们使用的一个软件依赖大型XML文件来包含其大部分configuration。 我们希望将我们的实验室环境作为我们的“黄金configuration”进行编目,然后能够在未来对该configuration进行审计。
由于diff是按字节进行比较而不是逻辑比较,所以在这种情况下我们不能用它来比较文件( XML是无序的,所以它不起作用)。 我正在寻找的东西可以parsing这两个XML文件,并逐个比较它们。 到目前为止,我们还没有find任何可以做到这一点的工具。 操作系统并不重要,我可以在任何需要的地方进行操作。 偏好是现成的。
有任何想法吗?
编辑:我们遇到的一个问题是一个供应商的configuration文件偶尔会多次提及相同的元素,每次都有不同的属性。 无论我们使用哪种diff实用程序,都需要能够识别属性集合或将它们全部识别为一个元素的一部分。 艰巨的任务 :)
我使用的两种方法是(a)对两个XML文件进行规范化,然后比较它们的序列化,(b)使用XPath 2.0 deep-equal()函数。 这两种方法都可以告诉你这些文件是否相同,但不是很好地告诉你它们在哪里不同。
专门解决这个问题的商业工具是DeltaXML。
如果你有一些你认为是等价的东西,但是它们在XML级别上是不相等的,例如,不同顺序的元素,那么在比较之前,你可能需要做一个转换来规范化文档。
基于Python的xmldiff看起来像一个非常有吸引力的解决scheme; 它声称“提取两个xml文件之间的差异,并返回一组要在源树上应用以获得目标树的基元”。
例:
a1.xml
<root> </root>
a2.xml
<root attr="test1"> </root>
xmldiff a1.xml a2.xml :
[append-first, /, <root attr="test1"/> ] [remove, /root[2]]
这里的答案很好:
https://superuser.com/questions/79920/how-can-i-diff-two-xml-files
$ xmllint --format --exc-c14n one.xml > 1.xml $ xmllint --format --exc-c14n two.xml > 2.xml $ diff 1.xml 2.xml
对任何未能遵守服务器故障约定的道歉…我敢肯定有人会让我知道,我会适当修改。
有商业和免费的工具,“XML意识”,并会做你所需要的没有太多的麻烦。 还有一个显然是用来比较XML的eclipse插件 。
或者,您可以通过xsl:sort或通过在XSD中指定序列顺序(这将使任何现有文档无效)来完成sorting。然后在比较非xml识别diff工具之前,对两个文档进行“规格化”。 首先进行规范化,除去不影响XML实际内容的任何格式差异。 (把它想象成应用XML代码风格的filter。)
我为这个xmldiffs写了一个简单的python工具:
比较两个XML文件,忽略元素和属性顺序。
用法:
xmldiffs [OPTION] FILE1 FILE2任何额外的选项都被传递给
diff命令。