IAm*_*aja 2 xml hash comparison md5
我最近试图找出比较两个大型XML文档的最快方法,一个同事建议对它们进行散列,然后只比较哈希字符串.
起初,这似乎是一个明显/好主意!但后来本能地告诉我,它可能"太好了,不可能是真的".
就像序列化POJO进行比较/克隆被广泛认为是"不良做法"一样,对于这种技术来说也是如此吗?为什么或者为什么不?警告/陷阱等?
首先让我说XML比较是棘手的.这很棘手,因为你很好地将它放在你的问题的标题中,你正在比较XML实例.
XML不仅仅是内容(文本文件,二进制文件等),您可以比较它们以查看是否有不同之处; XML具有意义,不同的XML实例可以具有相同的含义.
例如,考虑这个XML示例:
<sample a="foo" b="bar" />
Run Code Online (Sandbox Code Playgroud)
这有什么不同吗?
<sample b='bar' a='foo' />
Run Code Online (Sandbox Code Playgroud)
或这个:
<sample
a="foo"
b="bar" />
Run Code Online (Sandbox Code Playgroud)
甚至这个?:
<sample a="foo" b="bar"></sample>
Run Code Online (Sandbox Code Playgroud)
答案是样本都是平等的.但是如果你对每一个进行散列,你每次都会得到不同的哈希值.
如果要哈希XML实例并使用哈希进行比较,首先必须将它们转换为规范形式.如果XML不经常更改,您可以将XML存储在XML旁边,然后只比较哈希值.只有在发生变化时才计算消息摘要.这可能非常快.
另一个解决方案也是进行XSLT转换并使用两个XML实例作为输入.然后输出更简单的东西(可能是包含所有元素和属性名称和值的平面文件),这比较容易.
有很多方法可以比较XML文件和评论中提到的@ violet313,这实际上取决于你想要进行比较的原因以及你想要比较的内容.