Позвольте мне начать с того, что сравнение XML сложнее. Это сложно, потому что, поскольку вы очень хорошо выразились в названии своего вопроса, вы сравниваете экземпляры XML.
XML - это не только контент (текстовые файлы, двоичные файлы и т. Д.), Которые вы можете сравнить, чтобы увидеть, чем-то отличается; XML имеет смысл, и разные экземпляры XML могут иметь одинаковое значение.
Например, рассмотрим этот XML-образец:
<sample a="foo" b="bar" />
Это отличается от этого?
<sample b='bar' a='foo' />
или это:
<sample
a="foo"
b="bar" />
или даже это ?:
<sample a="foo" b="bar"></sample>
Ответ заключается в том, что образцы все равны. Но если вы хэш каждый из них, вы будете получать разные хеши каждый раз.
Если вы хотите использовать хэш-примеры XML и использовать хэш для сравнения, сначала вы должны получить их в a canonical form. Если XML не часто меняются, вы можете сохранить хэш вдоль стороны XML, а затем просто сравнить хэши. Вы вычисляете дайджест сообщения только тогда, когда что-то меняется. Это может быть очень быстро.
Другим решением будет также преобразование an XSLT и использование двух экземпляров XML в качестве входных данных. Затем вы выводите что-то более простое (возможно, плоский файл со всеми именами и атрибутами элементов и атрибутов), которые проще сравнивать.
Есть lots of ways to compare XML файлов и как @ violet313, упомянутых в комментарии, это действительно зависит от того, почему вы хотите провести сравнение и что именно вы хотите сравнить.
рискует казаться тупым, это действительно зависит от того, почему вы хотите провести сравнение. например: для системы резервного копирования, в которой вам необходимо записывать изменения, тогда принятие хэша в порядке. просто для того, чтобы знать, являются ли два файла одинаковыми или разными, байт для сравнения байтов может быть очень быстрым (каждый первый байт отличается от другого), тогда как что-то вроде [Rabin-Karp] (http: //en.wikipedia. org/wiki/Rabin-Karp_string_search_algorithm) - O (n) – violet313