SAX Parser - Übersicht
SAX (die einfache API für XML) ist ein ereignisbasierter Parser für XML-Dokumente. Im Gegensatz zu einem DOM-Parser erstellt ein SAX-Parser keinen Analysebaum. SAX ist eine Streaming-Schnittstelle für XML. Dies bedeutet, dass Anwendungen, die SAX verwenden, Ereignisbenachrichtigungen über das zu verarbeitende XML-Dokument erhalten - ein Element und ein Attribut zu einem Zeitpunkt in sequenzieller Reihenfolge, beginnend am Anfang des Dokuments und endend mit dem Schließen von das ROOT-Element.
Liest ein XML-Dokument von oben nach unten und erkennt die Token, aus denen ein wohlgeformtes XML-Dokument besteht.
Token werden in derselben Reihenfolge verarbeitet, in der sie im Dokument angezeigt werden.
Meldet das Anwendungsprogramm und die Art der Token, auf die der Parser beim Auftreten gestoßen ist.
Das Anwendungsprogramm bietet einen "Ereignis" -Handler, der beim Parser registriert werden muss.
Wenn die Token identifiziert werden, werden die Rückrufmethoden im Handler mit den relevanten Informationen aufgerufen.
Wann verwenden?
Sie sollten einen SAX-Parser verwenden, wenn -
Sie können das XML-Dokument linear von oben nach unten verarbeiten.
Das Dokument ist nicht tief verschachtelt.
Sie verarbeiten ein sehr großes XML-Dokument, dessen DOM-Baum viel Speicher belegt. Typische DOM-Implementierungen verwenden zehn Byte Speicher, um ein Byte XML darzustellen.
Das zu lösende Problem betrifft nur einen Teil des XML-Dokuments.
Daten sind verfügbar, sobald sie vom Parser angezeigt werden. Daher funktioniert SAX gut für ein XML-Dokument, das über einen Stream eingeht.
Nachteile von SAX
Wir haben keinen zufälligen Zugriff auf ein XML-Dokument, da es nur vorwärts weitergeleitet wird.
Wenn Sie die vom Parser gesehenen Daten verfolgen oder die Reihenfolge der Elemente ändern müssen, müssen Sie den Code schreiben und die Daten selbst speichern.
ContentHandler-Schnittstelle
Diese Schnittstelle gibt die Rückrufmethoden an, mit denen der SAX-Parser ein Anwendungsprogramm über die Komponenten des XML-Dokuments benachrichtigt, die er gesehen hat.
void startDocument() - Wird am Anfang eines Dokuments aufgerufen.
void endDocument() - Wird am Anfang eines Dokuments aufgerufen.
void startElement(String uri, String localName, String qName, Attributes atts) - Wird am Anfang eines Elements aufgerufen.
void endElement(String uri, String localName,String qName) - Wird am Ende eines Elements aufgerufen.
void characters(char[] ch, int start, int length) - Wird aufgerufen, wenn die Zeichendaten gefunden werden.
void ignorableWhitespace( char[] ch, int start, int length) - Wird aufgerufen, wenn eine DTD vorhanden ist und ignorierbare Leerzeichen auftreten.
void processingInstruction(String target, String data) - Wird aufgerufen, wenn eine Verarbeitungsanweisung erkannt wird.
void setDocumentLocator(Locator locator)) - Bietet einen Locator, mit dem Positionen im Dokument identifiziert werden können.
void skippedEntity(String name) - Wird aufgerufen, wenn eine nicht aufgelöste Entität gefunden wird.
void startPrefixMapping(String prefix, String uri) - Wird aufgerufen, wenn eine neue Namespace-Zuordnung definiert wird.
void endPrefixMapping(String prefix) - Wird aufgerufen, wenn eine Namespace-Definition ihren Gültigkeitsbereich beendet.
Attributs-Schnittstelle
Diese Schnittstelle gibt Methoden zum Verarbeiten der mit einem Element verbundenen Attribute an.
int getLength() - Gibt die Anzahl der Attribute zurück.
String getQName(int index)
String getValue(int index)
String getValue(String qname)