Das DOM Traversal Modul


Seminar XML | DOM - Das XML Document Object Model | Die Bestandteile des DOM nächstes Unterkapitel : DOM Range

Beschreibung

Struktur des DOM Traversal Moduls


Beschreibung :

Um eine Baum-Struktur zu traversieren gibt es bekannte rekursive Methoden. Naheliegend wäre über die "Node"-Objekte zu navigieren. Dabei würden jeweils die Zeiger für next und previous Sibling, sowie die Child-Liste der Nodes behilflich sein. Sollen jedoch nur bestimmte Elementtypen barbeitet werden (z.B. nur Comment-Elemente), müssen Filter-Methoden entwickelt werden. MIt dem DOM Traversal Modul wird versucht eine einheitliche Vorgehensweise zu definieren.
Das DOM Traversal Modul führt Schnittstellen ein, die es ermöglichen die Dokument-Struktur selektiv zu traversieren. Das DOM Traversal Modul verfolgt dabei zwei grundsätzlich unterschiedliche Ansätze.
So genannte "NodeIterators" fassen alle Knoten eines Teilbaums in einer geordneten Liste zusammen. In dieser "flachen" Liste kann nun vor und zurück navigiert werden. Da dieser Ansatz in keiner Weise die Hierachie der Dokument-Struktur beachtet, ist der "NodeIterator" nicht geeignet, wenn es darum geht die Struktur eines Dokumentes zu bearbeiten. "NodeIterators" dienen dazu, den Inhalt ganzer Teilbäume zu bearbeiten.
Alternativ zu den "NodeIterators" definiert das DOM Traversal Modul eine Schnittstelle zu so genannte "TreeWalkers". Ein "TreeWalker" ermöglicht es, unter Berücksichtigung der Hierachie der Knoten, in der Dokument-Struktur zu navigieren. Sie können dazu benutzt werden, die Dokument-Struktur zu verändern.
"NodeIterator" und "TreeWalker" haben jedoch eines gemeinsam : Sie bieten die Möglichkeit bestimmte Dokumenteninhalte auszublenden. Dies kann einerseits durch die Definition von Flags geschehen, oder durch das Einbinden von benutzerdefinierten Filtern, so genannte "NodeFilter".
 

Struktur des DOM Traversal Moduls :

NodeIterator :

Ein NodeIterator dient dazu eine Liste von Knoten, die einen Teilbaum der DOM-Struktur representiert, sequenziell zurückzugeben. Mit dem Konstruktor kann einem NodeIterator ein benutzerdefinierter NodeFilter, bzw. ein "whatToShow"-Flag übergeben werden. Diese Flags sind in "NodeFilter" definiert.

TreeWalker :

Ein Treewalker dient dazu ganze Teilbäume, unter Berücksichtigung der Hierachie, zu traversieren. Auch hier gibt es die Möglichkeiten bestimmmte Knotenarten über einen NodeFilter oder über Flags auszublenden. Ausgeblendete Knoten werden nicht an die Traversierungs-Routine zurückgegeben. Die Kind-Elemente eines ausgeblendeten Knotens werden jedoch weiterhin beachtet.

NodeFilter :

Das NodeFilter-Interface ist die Basis für alle benutzerdefinierten Filter. Alle Filter sollten daher dieses Interface implementieren. Ein Filter muss mindestens die Methode "acceptNode(Node n)" enthalten. Ein TreeWalker oder ein NodeIterator übergibt dem Filter durch diese Methode jeden zu prüfenden Node. Die Methode "acceptNode" teilt dann dem TreeWalker oder dem NodeIterator über ihren Rückgabewert mit, wie sie mit dem jeweiligen Node zu verfahren haben. Es gibt drei Möglichkeiten : FILTER_ACCEPT besagt, das der geprüfte Knoten weiterhin beachtet wird. FILTER_SKIP übergeht den Knoten, eventuelle Nachkommen müssen aber weiter geprüft werden. FILTER_REJECT hingegen übergeht auch die Nachkommen. Bei einem NodeIterator sind die Werte FILTER_SKIP und FILTER_REJECT synonym.
Das NodeFilter-Interface definiert Konstanten für die "whatToShow" Attribute der TreeWalker, bzw. der NodeIterator. Eine genaue Liste kann der DOM-LEVEL-2 Spezifikation entnommen werden. Dort sind auch die mit den Konstanten verbundenen Werte definiert.

DocumentTraversal

Das DocumentTraversal-Interface definiert die nötigen Fabrikmethoden für NodeIterator und TreeWalker. Das DocumentTraversal-Interface muss von dem Object implementiert werden, welches auch das Document-Interface beinhaltet.
Seminar XML | DOM - Das XML Document Object Model | Die Bestandteile des DOM | nächstes Unterkapitel : DOM Range