いくつかのテストを行っていますが、normalize()
メソッドを使用しても使用しなくても違いは見られません。しかし、ExampleDepotWebサイトの例ではそれを使用しています。それで、それは何のためですか? (ドキュメントも私には明確ではありませんでした)
プログラムで、実際のXML構造に対応しない無関係な構造を持つDOMツリーを構築できます。具体的には、テキストタイプの複数のノードが隣り合っている、またはテキストタイプの空のノードなどです。 normalize()
メソッドはこれらを削除します。つまり、隣接するテキストノードを結合し、空のテキストノードを削除します。
これは、DOMツリーが常に実際のXMLドキュメントから構築されたもののように見えることを期待する他のコードがある場合に役立ちます。
これは基本的に、次のXML要素を意味します
<foo>hello
wor
ld</foo>
非正規化されたノードでは、次のように表すことができます。
Element foo
Text node: ""
Text node: "Hello "
Text node: "wor"
Text node: "ld"
正規化すると、ノードは次のようになります
Element foo
Text node: "Hello world"
隣接するテキストノードと空のテキストノードからコードをクリーンアップします
同じXML構造に対応する可能性のあるDOMツリーは多数あり、各XML構造には少なくとも1つの対応するDOMツリーがあります。したがって、DOMからXMLへの変換は 全射 です。したがって、次のことが起こる可能性があります。
dom_tree_1 != dom_tree_2
# but:
dom_tree_1.save_DOM_as_XML() == dom_tree_2.save_DOM_as_XML()
そして、それを保証する方法はありません。
dom_tree == dom_tree.save_DOM_as_XML().load_DOM_from_XML()
しかし、私たちはそれを持ちたいです 全単射 。つまり、各XML構造は1つの特定のDOMツリーに対応します。
したがって、考えられるすべてのXML構造のセットに全単射する、考えられるすべてのDOMツリーのサブセットを定義できます。
# still:
dom_tree.save_DOM_as_XML() == dom_tree.normalized().save_DOM_as_XML()
# but with:
dom_tree_n = dom_tree.normalize()
# we now even have:
dom_tree_n == dom_tree_n.save_DOM_as_XML().load_DOM_from_XML().normalize()
したがって、正規化されたDOMツリーは、XML表現から完全に再構築できます。情報の損失はありません。
XMLドキュメントのルート要素を正規化します。これにより、ルートノードの下にあるすべてのテキストノードが「通常の」形式になります。つまり、ドキュメント内に隣接するテキストノードも空のテキストノードもありません。