Streaming API for XML
# Streaming API for XML

Streaming API for XML (StAX) ist ein Application Programming Interface (API), um XML-Dateien aus Java zu verarbeiten.

Die Referenzimplementierung ist als freie Software unter den Bedingungen der Apache-Lizenz verfügbar.

## Technik

Traditionellerweise sind XML-APIs:

### baumbasiert

    (z. B. DOM) – das gesamte Dokument wird als Baumstruktur in den Speicher gelesen und kann von dort direkt zugegriffen werden.

### ereignisbasiert

    (z. B. SAX) – die Anwendung bekommt ein Ereignis, wenn neue Entitäten im Dokument entdeckt werden.

Beide Varianten haben Vor- und Nachteile: die erste erlaubt wahlfreien Zugriff auf das Dokument, muss aber das Dokument im Speicher halten und benötigt somit mehr Speicher. Die zweite ist ein einmaliger Durchlauf durch das Quelldokument und benötigt somit kaum Speicher und ist auch schneller beim Parsen, erlaubt aber keinen direkten Zugriff auf Elemente oder Änderungen des Baumes.

StAX wurde als ein Mittelweg zwischen diesen beiden Gegensätzen entworfen. In der StAX-Metapher ist der programmatische Einstieg ein Cursor, der eine Stelle im Dokument repräsentiert. Die Anwendung bewegt den Cursor vorwärts, sie holt also die benötigte Information genau dann vom Parser, wenn sie benötigt wird. Dies unterscheidet sich von einer ereignisbasierten API, wie SAX, die die Daten aktiv in die Anwendung schickt und somit die Anwendung zur Verwaltung von Zustandsinformationen zwischen Ereignissen zwingt, um darin die aktuelle Position im Dokument festzuhalten.

StAX bietet neben dem Zugriff auf die XML-Daten über einen Cursor auch noch ein Iterator-Verfahren an. Das Iterator-Verfahren liefert die Daten in Form von Objekten, die von der Klasse XMLEvent abgeleitet sind. Die erzeugten Objekte bieten dem Java-Entwickler mehr Möglichkeiten als die String-Objekte beim Cursor-Verfahren, aber sie verringern die Performance.

StAX ist neben DOM, SAX und XSLT eine der Schnittstellen der Java API for XML Processing.

## Ursprünge

StAX hat seine Wurzeln in einer ganzen Reihe von ereignisgetriebenen Programmierschnittstellen, in erster Linie „XMLPULL“, dessen Autoren (Stefan Haustein und Aleksandr Slominski) unter anderem mit BEA, Oracle, Sun Microsystems, Breeze Factor und James Clark zusammenarbeiteten.

