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 インスタンスをハッシュ化し、そのハッシュを比較に使用する場合は、まずそれらを正規の形式にする必要があります。XML が頻繁に変更されない場合は、ハッシュを XML と一緒に保存してから、ハッシュを比較するだけです。何かが変更された場合にのみ、メッセージ ダイジェストを計算します。これは非常に高速です。
もう 1 つの解決策は、XSLT変換を行い、2 つの XML インスタンスを入力として使用することです。次に、比較が簡単な、より単純なもの (すべての要素と属性の名前と値を含むフラット ファイルなど) を出力します。
XML ファイルを比較する方法はたくさんあります。@violet313 がコメントで述べたように、比較する理由と正確に何を比較したいかによって異なります。