15

現在、XMLUnitライブラリを使用して 2 つの XML ファイルを比較しようとしています。そのうちの 1 つである候補は、Java オブジェクト (JAXB を使用) から私のコードによって生成され、もう 1 つは参照です(変更できません)。基本的に、参照 XML ファイルが与えられた場合、(Jaxb と独自のいくつかのクラスを使用して) それをシリアル化解除し、別のファイルにシリアル化して、同じコンテンツを保持できることを証明しようとしています。

ライブラリは必要なサービスを提供しているようですが、生成されたファイルが適切にインデントされていない場合 (「きれいな印刷」バージョンのようなもの) は比較に失敗し、インデントが OK の場合はそうではありません。たとえば、候補が生成されたときにインデントがない場合、コンテンツはワンライナーであり、インデントが適切に (手動で) 行われる場合、比較は OK です。

XMLUnit によって生成されるエラー メッセージは次のとおりです。

[異なる] 子ノードの数が '3' であると予想されていましたが、'1' でした

これを解決するアイデアはありますか?おそらく解決策は、候補のきれいな印刷バージョンを生成することです。この場合、それを JAXB シリアライザーと組み合わせるという考えはありますか?

ところで、Java で XML ファイルを比較するためのより優れたソリューションがあれば、それを知ってうれしいです ;)

よろしくお願いします。

4

1 に答える 1

20

クラスにプロパティを設定することで、ツリーと比較するときに XMLUnit で使用される制約の一部を緩和できますorg.custommonkey.xmlunit.XMLUnit

あなたの場合、おそらく欲しい:

XMLUnit.setIgnoreComments(true);
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true);

setIgnoredAttributeOrderまた、プロパティも同様に役立つ場合があります。

于 2011-03-09T16:09:49.207 に答える