2010-03-16 15 views
15

Ich mache einige Tests, aber ich sehe keinen Unterschied, wenn ich die normalize() Methode verwende oder nicht. Aber die Beispiele auf ExampleDepot Website verwenden es. Also, wofür ist es? (Die Dokumentation war auch für mich nicht klar)Was macht die Java Node Normalisierungsmethode?

Antwort

21

Sie können einen DOM-Baum programmatisch erstellen, der eine fremde Struktur hat, die nicht den tatsächlichen XML-Strukturen entspricht - insbesondere Dinge wie mehrere Knoten vom Typ Text nebeneinander oder leere Knoten von Text eingeben. Das normalize()-Verfahren entfernt diese, d.h. es kombiniert benachbarte Textknoten und entfernt leere Textknoten.

Dies kann nützlich sein, wenn Sie anderen Code haben, der erwartet, dass DOM-Bäume immer wie etwas aussehen, das aus einem tatsächlichen XML-Dokument erstellt wurde.

Diese im Grunde bedeutet, dass das folgende XML-Element

<foo>hello 
wor 
ld</foo> 

könnte so in einem denormalisierter Knoten dargestellt werden:

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

Wenn normalisiert, wird der Knoten wie folgt

Element foo 
    Text node: "Hello world" 
aussehen
3

Es bereinigt Code von benachbarten Textknoten und leere Textknoten

0

Normalisieren Sie das Stammelement des XML-Dokuments. Dies stellt sicher, dass alle Text-Knoten unter dem Wurzelknoten in eine "normale" Form gebracht werden, was bedeutet, dass es keine benachbarten Text-Knoten oder leere Text-Knoten in dem Dokument gibt.

2

Es gibt viele mögliche DOM-Bäume, die der gleichen XML-Struktur entsprechen und jede XML-Struktur hat mindestens einen entsprechenden DOM-Baum. Die Konvertierung von DOM nach XML ist surjective. So kann es passieren, dass:

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

Und es gibt keine Möglichkeit für die Gewährleistung:

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

Aber wir würden es gerne bijective haben. Das bedeutet, dass jede XML-Struktur einem bestimmten DOM-Baum entspricht.

Sie können also eine Teilmenge aller möglichen DOM-Bäume definieren, die für die Menge aller möglichen XML-Strukturen bijektiv ist.

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

So normalisierte DOM Bäume perfekt aus ihrer XML-Darstellung rekonstruiert werden. Es gibt keinen Informationsverlust.