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 nodeType | DOM-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