Java StAX Parser - Übersicht

StAX ist eine Java-basierte API zum Parsen von XML-Dokumenten auf ähnliche Weise wie der SAX-Parser. Es gibt jedoch zwei Hauptunterschiede zwischen den beiden APIs:

  • StAX ist eine PULL-API, während SAX eine PUSH-API ist. Dies bedeutet, dass im Fall eines StAX-Parsers eine Clientanwendung den StAX-Parser auffordern muss, Informationen aus XML abzurufen, wann immer dies erforderlich ist. Im Falle eines SAX-Parsers ist jedoch eine Clientanwendung erforderlich, um Informationen abzurufen, wenn der SAX-Parser die Clientanwendung benachrichtigt, dass Informationen verfügbar sind.

  • Die StAX-API kann XML-Dokumente lesen und schreiben. Mit der SAX-API kann eine XML-Datei nur gelesen werden.

Umgebungs-Setup

Um den StAX-Parser verwenden zu können, sollte stax.jar im Klassenpfad Ihrer Anwendung enthalten sein.

Im Folgenden sind die Funktionen der StAX-API aufgeführt:

  • 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 dem Anwendungsprogramm die Art der Token, auf die der Parser beim Auftreten gestoßen ist.

  • Das Anwendungsprogramm bietet einen "Ereignis" -Leser, der als Iterator fungiert und das Ereignis durchläuft, um die erforderlichen Informationen zu erhalten. Ein weiterer verfügbarer Reader ist "Cursor", der als Zeiger auf XML-Knoten fungiert.

  • Sobald die Ereignisse identifiziert sind, können XML-Elemente aus dem Ereignisobjekt abgerufen und weiterverarbeitet werden.

Wann verwenden?

Sie sollten einen StAX-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 zu viel Speicher verbrauchen würde. 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 StAX 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 Daten verfolgen müssen, die der Parser gesehen hat oder wo der Parser die Reihenfolge der Elemente geändert hat, müssen Sie den Code schreiben und die Daten selbst speichern.

XMLEventReader-Klasse

Diese Klasse bietet einen Iterator für Ereignisse, mit dem Ereignisse beim Parsen eines XML-Dokuments durchlaufen werden können.

  • StartElement asStartElement() - Wird verwendet, um den Wert und die Attribute eines Elements abzurufen.

  • EndElement asEndElement() - Wird am Ende eines Elements aufgerufen.

  • Characters asCharacters() - Kann verwendet werden, um Zeichen wie CDATA, Leerzeichen usw. abzurufen.

XMLEventWriter-Klasse

Diese Schnittstelle gibt Methoden zum Erstellen eines Ereignisses an.

  • add(Event event) - Fügen Sie XML Ereignisse hinzu, die Elemente enthalten.

XMLStreamReader-Klasse

Diese Klasse bietet einen Iterator für Ereignisse, mit dem Ereignisse beim Parsen eines XML-Dokuments durchlaufen werden können.

  • int next() - Wird verwendet, um das nächste Ereignis abzurufen.

  • boolean hasNext() - Wird verwendet, um zu überprüfen, ob weitere Ereignisse vorhanden sind oder nicht.

  • String getText() - Wird verwendet, um den Text eines Elements abzurufen.

  • String getLocalName() - Wird verwendet, um den Namen eines Elements abzurufen.

XMLStreamWriter-Klasse

Diese Schnittstelle gibt Methoden zum Erstellen eines Ereignisses an.

  • writeStartElement(String localName) - Fügen Sie ein Startelement mit Vorname hinzu.

  • writeEndElement(String localName) - Fügen Sie ein Endelement mit Vornamen hinzu.

  • writeAttribute(String localName, String value) - Schreiben Sie Attribute in ein Element.