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.10

SAX (Simple API for XML)



Das Simple API for XML (SAX) ist eine Event-orientierte Schnittstelle zur Verarbeitung von XML-Dokumenten. SAX wurde von David Megginson entwickelt und definiert einen einheitlichen Zugriff auf den Parser und auf die Ereignisse beim Parse-Vorgang. Ähnlich zu DOM besteht SAX zum größten Teil aus Interfaces, die Parser-spezifisch durch so genannte SAX-Treiber implementiert werden. Die meisten gängigen Parser wie Crimson, Xerces oder auch XP enthalten standardmäßig eine SAX-Implementierung.

SAX definiert beispielsweise eine Methode parse(), mit der der Parser veranlasst wird, ein Dokument zu analysieren. Darüber hinaus spezifiziert SAX Interfaces und Klassen, mit denen eine XML-Applikation beim Eintritt bestimmter Ereignisse während der Baumtraversierung Callbacks erhalten kann, z. B. beim Erreichen des Anfangs oder des Endes eines Elements.

Abbildung 20.10: SAX
Abbildung 20.10

Um eine XML-Applikation mit SAX zu erstellen, sind in der Regel drei Schritte erforderlich:

Abbildung 20.10 zeigt das Zusammenspiel zwischen Parser, SAX-Treiber und XML-Applikation noch einmal im Überblick.

Das folgende Beispiel eines SAX-Event-Handlers gibt die Schachtelungshierarchie der Elemente eines XML-Dokuments auf der Standardausgabe aus. Hierzu wird zunächst eine Unterklasse von DefaultHandler definiert:
  class NestingHandler extends DefaultHandler {
    // Zähler für die Schachtelungstiefe
    int nestingLevel = 0;
  
    public void startElement(String uri, String localName,
                             String qName, Attributes attributes) {
      // Am Anfang eines Elements die Ausgabe einrücken...
      for(int i = 0; i < nestingLevel*2; i++)
        System.out.print(' ');
      System.out.println(qName);
      // ...und die Schachtelungstiefe hochzählen
      nestingLevel++;
    }
  
    public void endElement(String uri, String localName, String qName) {
      nestingLevel--;
    }
  
  }
Die Erzeugung eines SAX-Parsers erfolgt mit der Klasse SAXParserFactory. Zuvor muss eine Referenz auf die Factory mit der statischen Methode newInstance() ermittelt werden.
  SAXParserFactory factory;
  SAXParser parser;

  // Abruf eines Factory-Exemplars
  factory = SAXParserFactory.newInstance();
  // Erzeugung des Parsers über diese Factory
  parser = factory.newSAXParser();
Nachdem ein SAXParser-Exemplar vorhanden ist, kann der Parse-Vorgang mit folgender Zeile angestoßen werden:
  parser.parse(new File(args[0]), new NestingHandler());
Hierbei wird zum einen die Quelle des zu analysierenden Dokuments angegeben (hier eine Datei, deren Name als Kommmandozeilen-Parameter übergeben wird) und zum anderen der Event-Handler, der von den Parser-Ereignissen benachrichtigt werden soll. In diesem Fall wird ein Exemplar des zuvor gezeigten NestingHandler übergeben.

Die Ausgabe könnte etwa folgendermaßen aussehen:
  TELEFONLISTE
    MITARBEITER
      NAME
      EMAIL
      TEL
    MITARBEITER
      NAME
      EMAIL
      TEL
    MITARBEITER
      NAME
      EMAIL
      TEL
Diese Ausgabe bezieht sich auf das Beispieldokument, das im nachfolgenden Abschnitt verwendet wird.

Material zum Beispiel


 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.