2012-08-29 60 views
5

我有两个XML文件(XSD)是由某些工具生成的。
该工具不会保留元素的顺序,因此虽然内容相同,但将其作为文本与文本不同的结果相比较。
是否有一些工具可以在比较之前对元素进行排序并启用文档的文本比较? 当然,排序需要递归完成。如何比较XML文件

数据例如:
文件:

<xml> 
    <A/> 
    <B/> 
</xml> 

文件B:

<xml> 
    <B/> 
    <A/> 
</xml> 

回答

4

我有一个类似的问题,我最终发现:http://superuser.com/questions/79920/how-can-i-diff-two-xml-files

该职位建议排序做一个规范的XML然后做一个差异。下面应该为你工作,如果你是在Linux,Mac,或者如果你有窗户安装了类似的cygwin:

$ xmllint --c14n FileA.xml > 1.xml 
$ xmllint --c14n FileB.xml > 2.xml 
$ diff 1.xml 2.xml 
-1

的XML样本是根本不同的。即使内容和层次可能相同,对等关系之间的关系也是不同的。当XML被解析时,它被解析成一个称为DOM的结构,其中单元之间的关系非常重要。如果你想打折同行之间的关系的性质,那么你可能需要定制软件。我建议您找一些简单的开源XML感知差异工具,并添加所需的附加要求。我写了一个http://prettydiff.com/,但我建议你在做出决定之前先看看有什么可用,因为编辑别人的算法可能需要一些繁重的工作。

0

对于它的价值,我已经创建了一个Java工具(或科特林实际上)为effecient和可配置的xml文件的规范化。

,它会永远:

  • 排序节点和属性的名字。
  • 删除命名空间(是的 - 它可以 - 假设 - 是一个问题)。
  • Prettyprint的结果。

此外,你可以告诉它:

  • 删除节点名称定列表 - 也许你不想知道,一块元数据的价值 - 说<RequestReceivedTimestamp>已经改变。
  • 在家长的上下文中对给定的收藏列表进行排序 - 也许您不在乎 <ListOfFavourites>中的条目已更改。

它使用XSLT并使用链接有效地执行上述操作。

限制

它支持排序嵌套列表 - 前外排序最里面的名单。但它不能可靠地排序任意级别的递归嵌套列表。

如果您有这样的需求,您可以在使用此工具后比较结果的排序字节数组。如果只有列表排序问题仍然存在,它们将是平等的

哪里得到它

你可以在这里得到它:XMLNormalize