Das DOM Traversal Modul
Seminar XML |
DOM - Das XML Document Object Model |
Die Bestandteile des DOM
nächstes Unterkapitel : DOM Range
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
-
FILTER_SKIP
-
FILTER_REJECT
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