Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


20.12.4

DOM-Alternativen


Das DOM-API des W3C ist zwar sprachunabhängig und konsequent baumorientiert entworfen, jedoch bringen genau diese beiden Eigenschaften auch einige Nachteile mit sich. Neben dem grundsätzlichen Fehlen einer Möglichkeit zum Abspeichern des Baums (z.Zt. für DOM Level 3 angedacht), fallen dem Java-Programmierer Ungereimtheiten auf. So bietet beispielsweise die NodeList von DOM die Methode getLength() (die gemäß den Java-Konventionen eher getSize() heißen müsste), während die Methode für den Zugriff auf ein Element lediglich item(int index) heißt. Zudem fehlt bei NodeList die Unterstützung des Collection API, die von den Such- und Zugriffsfunktionen her deutlich flexibler ist als die von DOM angebotenen Methoden.

Auch die Navigation im DOM-Baum ist durch den konsequent baumorientierten Ansatz teilweise recht umständlich. Insbesondere beim Abrufen von Textinhalten muss immer erst zum Textknoten navigiert werden; der Abruf von Textdaten von einem übergeordneten Elementknoten aus ist nicht möglich.

Um auf das Element enkel (Unterknoten vom Tochterknoten kind) genau zwei Ebenen tiefer zuzugreifen, ist folgender Code mit DOM zu benutzen:
for (int i = 0; i < e.getChildNodes().getLength(); i++) {
  Node n = e.getChildNodes().item(i);
  for (int j = 0; j < n.getChildNodes().getLength(); j++) {
    Node n2 = n.getChildNodes().item(j);
    if (n2.getNodeName().equals("enkel")) {
       // Gefunden
       }
  }
Aus diesen Gründen sind mit der Zeit Open-Source-Alternativen zu DOM entstanden, die zwar nicht offiziell standardisiert sind, aber durch ihre mittlerweile weite Verbreitung den Status eines Quasi-Standards haben. Auch die Weiterentwicklung erfolgt dort erheblich schneller als der offizielle Standardisierungsprozess beim W3C für DOM. Die beiden wichtigsten Open-Source-APIs sind: Der oben gezeigte Zugriff auf ein »Enkel«-Element kann mit JDOM folgendermaßen erfolgen:
  e.getChild("kind").getChild("enkel");
Noch einfacher ist der Zugriff mit DOM4J, da diese Implementierung den W3C-Standard XPath zum beliebigen Navigieren im XML-Baum unterstützt.:
  e.selectSingleNode("kind/enkel");

Die beiden oben genannten bekanntesten Vertreter solcher High-Level-APIs unterstützen JAXP-konforme XML-Parser und bieten komfortable Klassen zum Speichern der Dokumente.

Es wird empfohlen, bei Eigenentwicklungen den Einsatz einer dieser beiden Open-Source-APIs in Erwägung zu ziehen, da sich je nach Anwendung eine deutliche Ersparnis an Entwicklungsaufwand und Code ergeben kann. Auch ohne diese Alternativ-Implementierungen wird man in der Praxis oft nicht ohne die spezifische Funktionalität einer bestimmten Implementierung auskommen.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.