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.*;
Abb. 5.1 Beispiel einer ContentHandler-Implementierung
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);
}
}
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.
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.*
Abb. 5.2 Beispiel zum Aufrufen des Parsers
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());
}
}
}
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.
![]() |
![]() |
![]() |
![]() ![]() ![]() ![]() |