5. Einsatz in Java

5.1 Implementierung des ContentHandler-Interface

Unser Konsument ist eine Implementierung des Interfaces "ContentHandler" aus dem Paket "org.xml.sax". Dabei müssen alle Methoden implementiert werden, aber nicht alle müssen wirklich etwas machen, sie können auch einfach leer sein.

import org.xml.sax.*;
public class MyContentHandler implements ContentHandler {
  private int counter;
  
  public void startDocument() throws SAXException {
    counter=0;
  }
  
  public void startElement(String uri, String lName, String qName, Attributes att) throws SAXException {
    counter++;
  }
  
  public void endElement(String uri, String lName, String qName) throws SAXException {}
  public void characters(char[] text, int start, int length) throws SAXException {}
  
  //Alle anderen Methoden
  //...
  
  public void endDocument() throws SAXException {
    System.out.println("Anzahl Elemente: "+counter);
  }
}
Abb. 5.1 Beispiel einer ContentHandler-Implementierung

Beispiel 5.1 zeigt eine solche Implementierung. Hierbei wird noch eine Variable namens "counter" angelegt. In der Methode "startDocument", also beim Beginn des Parsens wird diese mit "0" initialisiert.
Bei jedem Aufruf von "startElement" wird diese Variable inkrementiert. Somit werden die Element gezählt.
Am Ende des Parsens und dem damit verbundenen Aufruf von "endDocument" wird die gezählte Anzahl ausgegeben.
Alle anderen Methoden sind auch implementiert, erfüllen aber keinerlei Funktion. Wenn man dies vermeiden möchte, kann man auch die Klasse "DefaultHandler" aus dem Paket "org.xml.sax.helpers" erweitern.

5.2 Aufruf des Parsers

Um unseren Parser aufrufen zu können, müssen wir die Pakete "org.xml.sax" und "org.xml.sax.helpers" importieren, danach erstellen wir eine Instanz des "XMLReader", wobei wichtig ist, dass die Pakete des Parsers auch installiert wurden. Als nächstes übergeben wir eine Instanz unseres implementierten "ContentHandler" an den "XMLReader" und starten den Parser mit der Funktion "parse" und unserer zu parsenden XML-Datei.

import org.xml.sax.*
import org.xml.sax.helpers.*
public class Beispiel {
  public static void main(String[] args){
    try {
      XMLReader parser = XMLReaderFactory.createXMLReader(
      "org.apache.xerces.parsers.SAXParser");
      parser.setContentHandler(new MyContentHandler());
      parser.parse("test.xml");
    }
    catch (SAXException e) {
      System.out.println("Fehler beim Initialisieren des Parsers: "+e.getMessage());
    }
    catch (SAXParseException e) {
      System.out.println("Dokument ist nicht wohlgeformt:" +e.getMessage());
    }
  }
}
Abb. 5.2 Beispiel zum Aufrufen des Parsers

Beispiel 5.2 übergibt die Datei "test.xml" an den Parser und dieser verarbeitet dann diese mithilfe unserer Klasse "MyContentHandler". Falls es Probleme gibt, beim Initialisieren des Parsers oder mit der Wohlgeformtheit unseres Dokumentes, werden entsprechende Fehlermeldungen ausgegeben.

top | SAX | Inhalt | created 2004 by Sascha Dienelt