2010-03-16 6 views
15

Je fais quelques tests, mais je ne vois pas de différence quand j'utilise ou non la méthode normalize(). Mais les exemples du site ExampleDepot l'utilisent. Alors, à quoi cela sert-il? (La documentation n'était pas claire pour moi non plus)Que fait la méthode de normalisation Java Node?

Répondre

21

Vous pouvez créer par programme un arbre DOM qui a une structure externe ne correspondant pas aux structures XML réelles - spécifiquement des choses comme plusieurs nœuds de type texte l'un à côté de l'autre, ou des nœuds vides de tapez du texte. La méthode normalize() supprime celles-ci, c'est-à-dire qu'elle combine des nœuds de texte adjacents et supprime ceux qui sont vides.

Cela peut être utile lorsque vous avez un autre code qui s'attend à ce que les arborescences DOM ressemblent toujours à quelque chose construit à partir d'un document XML réel.

Cela signifie que l'élément XML suivant

<foo>hello 
wor 
ld</foo> 

pourrait être représenté comme celui-ci dans un nœud dénormalisé:

Element foo 
    Text node: "" 
    Text node: "Hello " 
    Text node: "wor" 
    Text node: "ld" 

Lorsque normalisée, le nœud ressemblera à ceci

Element foo 
    Text node: "Hello world" 
3

Il nettoie le code des nœuds Text adjacents et vide les nœuds Text

0

Normalise l'élément racine du document XML. Cela garantit que tous les nœuds Text sous le nœud racine sont mis dans une forme "normale", ce qui signifie qu'il n'y a ni nœuds Text adjacents ni nœuds Text vides dans le document.

2

Il y a beaucoup d'arbres DOM possibles qui correspondent à la même structure XML et chaque structure XML a au moins une arborescence DOM correspondante. La conversion de DOM en XML est donc surjective. Il peut arriver que:

dom_tree_1 != dom_tree_2 
# but: 
dom_tree_1.save_DOM_as_XML() == dom_tree_2.save_DOM_as_XML() 

Et il n'y a aucun moyen d'assurer:

dom_tree == dom_tree.save_DOM_as_XML().load_DOM_from_XML() 

Mais nous aimerions avoir bijective. Cela signifie que chaque structure XML correspond à une arborescence DOM particulière.

Vous pouvez donc définir un sous-ensemble de tous les arborescences DOM possibles qui soit bijective à l'ensemble de toutes les structures XML possibles.

# 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() 

peuvent être parfaitement reconstruits à partir de leur représentation XML arbres DOM donc normalisés. Il n'y a pas de perte d'information.

Questions connexes