我有两个由某些工具生成的XML文件(XSD)。该工具未保留元素的顺序,因此尽管内容相等,将其作为文本进行比较将导致文件不同。是否有一些工具可以在比较之前对元素进行排序,并启用文档的文本比较?当然,需要递归地进行排序。
数据示例: 文件A:
数据示例: 文件A:
<xml>
<A/>
<B/>
</xml>
文件B:
<xml>
<B/>
<A/>
</xml>
<xml>
<A/>
<B/>
</xml>
文件B:
<xml>
<B/>
<A/>
</xml>
我曾经遇到过类似的问题,最终找到了解决方法:http://superuser.com/questions/79920/how-can-i-diff-two-xml-files
那篇文章建议先对XML文件进行规范排序,再进行比较。如果你正在使用Linux、Mac或者已经安装了类似Cygwin的Windows系统,下面的方法应该适用:
$ xmllint --c14n FileA.xml > 1.xml
$ xmllint --c14n FileB.xml > 2.xml
$ diff 1.xml 2.xml
您可以在此处获取:XMLNormalize
XML样本基本上是不同的。即使内容和层次结构可能相同,但对等方之间的关系是不同的。当解析XML时,它被解析为一种称为DOM的结构,其中单位之间的关系非常重要。如果您想忽略对等实体之间的关系性质,则可能需要自定义软件。我建议找到一些简单的开源XML感知差异工具,并添加您需要的其他要求。我在http://prettydiff.com/编写了一个,但在做出决定之前建议您四处寻找可用的工具,因为编辑别人的算法可能需要一些艰苦的努力。