Java で DOM ドキュメントとして表された XML ドキュメント内の XML 名前空間定義を「正規化」する簡単な方法があるのだろうか?
これが必要な理由は、どちらも XML 名前空間を使用する 2 つのドキュメントを比較できるようにするためです。
XML 名前空間はドキュメントの任意の場所 (ルート要素、任意の要素) などで指定できるため、DOM ツリーの観点から見ると、事実上同じである 2 つのドキュメントが大きく異なる場合があります。たとえば、1 つはルート要素で定義されたすべての名前空間属性を持つことができ、もう 1 つは名前空間が適用される DOM ツリー階層の「最上位」要素で各名前空間を定義できます。本質的に、これらは同じドキュメントである可能性がありますが、たとえば XmlUnit で比較すると、比較の問題が発生します。
2 つの例を示します。
<root xmlns:foo="http://foo/">
<e1>
<foo:e2>bar</foo:e2>
</e1>
</root>
対:
<root>
<e1 xmlns:foo="http://foo/">
<foo:e2>bar</foo:e2>
</e1>
</root>
これらのドキュメントは事実上同じですが、XML を比較すると異なることがわかります。
名前空間の定義を正規化するための簡単で簡単な方法があるのだろうか、たとえば、それらをすべてルート要素に入れるのだろうか?
もちろん、そのようなコードを自分で書くこともできますが、これがすでに利用可能であれば、それはずっと良いでしょう:)