Das Interface Node und andere generische Interfaces

(Auszug aus "XML in a Nutshell" von Elliotte Rusty Harold & W. Scott Means)

Das Interface Node ist der Ausgangspunkt in der Hierarchie des DOM-Kerns. Obwohl ein Node niemals direkt instanziiert wird, werden doch alle anderen Interfaces von diesem Basis-Interface abgeleitet. Das bedeutet, dass man mit Hilfe des Node-Interfaces Informationen über jedes beliebige Objekt in einem DOM-Dokumentbaum gewinnen kann, ohne seinen tatsächlichen Typ zu kennen. Man kann die gesamte Dokumentstruktur durchlaufen und den Inhalt eines Dokuments analysieren, indem man nur die vom Node-Interface definierten Properties und Methoden verwendet. Wie in der folgenden Tabelle dargestellt, liefert dieses Interface Informationen über den Typ, die Platzierung, den Namen und den Wert der jeweiligen Dokumentdaten.

Tabelle: Das Node-Interface

Name Typ Nur-lesbar 2.0 3.0
Attribute
attributes NamedNodeMap
baseURI DOMString
childNodes NodeList
firstChild Node
lastChild Node
localName DOMString
namespaceURI DOMString
nextSibling Node
nodeName DOMString
nodeType unsigned short
nodeValue DOMString
ownerDocument Document
parentNode Node
prefix DOMString
previousSibling Node
textContent DOMString
Methoden
appendChild Node
cloneNode Node
compareDocumentPosition unsigned short
getFeature DOMObject
getUserData DOMUserData
hasAttributes boolean
hasChildNodes boolean
insertBefore Node
isDefaultNamespace boolean
isEqualNode boolean
isSameNode boolean
isSupported boolean
lookupNamespaceURI DOMString
lookupPrefix DOMString
normalize void
removeChild Node
replaceChild Node
setUserData DOMUserData

Da ein Node niemals direkt erzeugt wird, gibt es ein Attribut nodeType. Dieses enthält einen Wert, der Auskunft über den tatsächlichen Typ einer Node-Instanz gibt. Ausgehend vom nodeType kann man den Cast-Operator verwenden, um einen generischen Verweis auf einen Node korrekt an ein spezialisiertes Interface zur Weiterverarbeitung zu übergeben. Die folgende Tabelle gibt uns einen Überblick über die möglichen Werte dieses Attributs und die entsprechenden DOM-Interfaces. Die übernächste Tabelle enthält eine Übersicht über die möglichen Werte der Attribute nodeName, nodeValue und attributes.

Tabelle: Typen eines DOM-Knotens und die entsprechenden Interfaces

Wert von nodeTypeDOM-Interfaces
ATTRIBUTE_NODE Attr
CDATA_SECTION_NODE CDATASection
COMMENT_NODE Comment
DOCUMENT_FRAGMENT_NODE DocumentFragment
DOCUMENT_NODE Document
DOCUMENT_TYPE_NODE DocumentType
ELEMENT_NODE Element
ENTITY_NODE Entity
ENTITY_REFERENCE_NODE EntityReference
NOTATION_NODE Notation
PROCESSING_INSTRUCTION_NODE ProcessingInstruction
TEXT_NODE Text

Tabelle: Typen eines DOM-Knotens und die Rückgabewerte der Methoden

Wert von nodeType nodeName nodeValue Attribute
ATTRIBUTE_NODE Attributname Attributwert null
CDATA_SECTION_NODE #cdata-section content null
COMMENT_NODE #comment content null
DOCUMENT_FRAGMENT_NODE #document-fragment null null
DOCUMENT_NODE #document null null
DOCUMENT_TYPE_NODE Dokumenttyp-Name null null
ELEMENT_NODE Tag-Name null NamedNodeMap
ENTITY_NODE Entity-Name null null
ENTITY_REFERENCE_NODE Name des referenzierten Entities null null
NOTATION_NODE Notationsname null null
PROCESSING_INSTRUCTION_NODE Ziel Inhalt ohne Ziel null
TEXT_NODE #text content null

Beachten Sie, dass das Attribut nodeValue die Inhalte von einfachen Text- und Kommentar-Knoten zurückgibt, aber nichts für Elemente. Vor DOM Level 3 mussten alle in einem Element eventuell vorhandenen Text-Kindknoten lokalisiert werden, bevor der Textinhalt des Elements abgerufen werden konnte. Aber DOM Level 3 hat die neuen Funktionen getTextContent( ) und setTextContent( ) eingeführt, die mehr Annehmlichkeit bieten.

Das Interface NodeList

Das Interface NodeList bietet Zugriff auf den geordneten Inhalt eines Knotens. Meistens wird es verwendet, um die Text-Knoten und Kindelemente eines Element-Knotens zu bekommen. Die folgende Tabelle bietet eine Zusammenfassung des Interfaces NodeList.

Tabelle: Das NodeList-Interface

Name Typ Nur-lesbar? 2.0 3.0
Attribute
length Long
Methoden
item Node

Das Interface NodeList ist fundamental und wird in der Regel mit einer Schleife kombiniert, um wie in folgendem Beispiel alle Kinder eines Knotens zu durchlaufen:

NodeList nl = nd.getChildNodes(  );
for (int i = 0; i < nl.getLength(  ); i++) {
  Node ndChild = nl.item(i);
  if (ndChild.getNodeType(  ) =  = Node.COMMENT_NODE) {
    System.out.println("Kommentar gefunden: " + ndChild.getNodeValue(  ));
  }
}

Das Interface NamedNodeMap

Das Interface NamedNodeMap wird zur Erzeugung ungeordneter Ansammlungen verwendet, deren Inhalte durch ihre Namen identifiziert werden. Praktisch wird es für den Zugriff auf die Attribute eines Elements eingesetzt. In der folgenden Tabelle finden Sie eine Zusammenfassung des Interfaces NamedNodeMap.

Tabelle: Das NamedNodeMap-Interface

Name Typ Nur-lesbar? 2.0 3.0
Attribute
length Long
Methoden
getNamedItem Node
getNamedItemNS Node
removeNamedItem Node
removeNamedItemNS Node
setNamedItem Node
setNamedItemNS Node

Die Dokumentstruktur und Node

Auch wenn DOM keine Anbindung an den Parser spezifiziert, wird doch genau festgelegt, wie die Syntax-Strukturen des Dokuments in DOM-Objekte zu übersetzen sind. Ein Dokument wird als hierarchische Baumstruktur dargestellt, wobei jeder Knoten im Baum mit seinem Elternknoten, seinen Kindern und seinen Geschwistern verbunden ist:

 

<beispiel name="wert"><textknoten>Testdaten</textknoten></beispiel>

Die Abbildung Das Dokument im Speicher mit Verknüpfungen zeigt, wie dieses kleine Beispieldokument durch einen DOM-Parser abgebildet wird.

Jedes von Node abgeleitete Objekt in einem DOM-Dokument enthält Referenzen auf seinen Eltern-, Kinder- und Geschwisterknoten. Diese Referenzen erlauben einem Anwendungsprogramm den Einsatz der typischen Algorithmen für Baumstrukturen, um die einzelnen Teile des Dokuments zu durchlaufen. »Den Baum zu durchlaufen« ist ein gängiger Ansatz, um Informationen in einem DOM zu finden. Die Funktionsweise wird anhand des Code-Beispiels Eine Möbelprüfer-Anwendung auf der Seite Eine einfache DOM-Anwendung gezeigt.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

  


Copyright © 2005 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML in a Nutshell" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de