StAX: So parst man XML-Code mit Java

StAX ist eine Programmierschnittstelle, die das Lesen und Schreiben von XML-Dokumenten in Java ermöglicht. Die reine Java-API basiert auf Schnittstellen, die von unterschiedlichen Parsern implementiert werden können.

StAX (Streaming API for XML) wurde mit Java 6.0 eingeführt. Die Schnittstelle steht in dem Ruf, SAX (Simple API for XML) und DOM (Document Object Model) überlegen zu sein. ZDNet wirft nachfolgend einen Blick auf die API, erklärt die Funktionsweise und liefert einige Code-Beispiele.

Eine kurze Einführung in StAX

XML-APIs sind traditionell entweder baum- oder ereignisbasiert. Bei baumbasierten APIs wird das gesamte Dokument als Baumstruktur in den Speicher gelesen. Damit hat die bearbeitende Anwendung wahlfreien Zugriff darauf. Bei ereignisbasierten XML-APIs reagiert die Anwendung auf empfangene Ereignisse, sobald sie auf bestimmte Elemente innerhalb des Quelldokuments stößt.

Baumbasierte APIs, etwa DOM, ermöglichen den wahlfreien Zugriff auf das Dokument. Ereignisbasierte APIs, beispielsweise SAX, benötigen jedoch weniger Speicherplatz und arbeiten normalerweise wesentlich schneller.

Diese beiden Zugriffsmethoden stellen also zwei entgegengesetzte Ansätze dar. Eine baumbasierte API gewährt unbegrenzten und wahlfreien Zugriff sowie Manipulationsmöglichkeiten. Die ereignisbasierte API durchläuft das Quelldokument dagegen nur ein einziges Mal.

StAX wurde als eine Art Zwischenstufe zwischen diesen beiden Extrempositionen entwickelt. Bei StAX besteht der programmiertechnische Einstiegspunkt in einem Cursor, der einen Punkt innerhalb des Dokuments repräsentiert. Die Anwendung bewegt diesen Cursor vorwärts, das heißt sie "zieht" (pull) die Informationen nach Bedarf vom Parser ab. Dies unterscheidet sich von einer ereignisbasierten API, die die Daten eher zur Anwendung "schiebt" (push). Das setzt voraus, dass sich die Anwendung den Status zwischen den Ereignissen gegebenenfalls merkt. So weiß sie jederzeit, an welcher Stelle innerhalb des Dokuments sie sich gerade befindet.

StAX verwendet ein Pull-Konzept. Folglich fragt der Entwickler Ereignisse ab, anstatt Ereignisinformationen vom XML-Parser automatisch an den Client schicken zu lassen (Push-Ansatz). Das führt letztlich zu einem natürlicheren, lesbareren Programmcode, ohne dass dies zu Lasten der Performance geht. StAX hat seine Wurzeln in einer Reihe inkompatibler Pull-APIs für XML. XMLPULL ist wohl die bekannteste davon.

So funktioniert die StAX-API

Die Kern-API von StAX besteht aus zwei Komponenten: der Event-Iterator-API und der Cursor-API. Anwendungen können diese APIs zum Lesen, Parsen und Schreiben von XML-Dokumenten verwenden.

Die Event-Iterator-API

Die Event-Iterator-API ist SAX sehr ähnlich. Sie hat zwei wichtige Schnittstellen: den XMLEventReader zum Parsen von XML und den XMLEventWriter zum Erzeugen von XML-Code.

Als Beispiel soll folgende einfache XML-Datei dienen:

Fanden Sie diesen Artikel nützlich?
6 von 8 Lesern fanden diesen Artikel nützlich.

Aktuelle Job-Angebote

Lesermeinungen zum Artikel

 
von Det
am 2. Juni 2009, 13:58 Uhr
Unleserliche Codepräsentation macht den Artikel zu einer Qual
Hallo,

dieser Artikel könnte vielleicht sehr nützlich sein (ich hätte die Info für ein Terminprojekt gerade dringend gebrauchen können).

Leider habe ich keine Lust, jedes Codebeispiel erst aus dem Scroll-Feld herauszukopieren und durch einen Beautifyer zu schicken, damit ich das Ganze nachvollziehen kann.

Wenn der Artikel bspw. auch druckbar sein soll, dann sollte man den Code schon qualifizierter präsentieren. Im Druck wird 1.) die Schmalspaltensicht beibehalten und zum Anderen nur der Viewport gezeigt. Alles andere wird abgeschnitten.

Diese Codepräsentation finde ich auf einer IT-lastigen Site wie ZDNet doch eher lächerlich!
 
von Tja
am 3. Juli 2010, 20:23 Uhr
AW: Unleserliche Codepräsentation macht den Artikel zu einer Qual
"Ich hätte die Info gerade dringend für ein Terminprojekt brauchen können, habe aber leider keine Lust die Codebeispiele rauszukopieren"

Haben Sie das auch Ihrem Auftraggeber so gesagt?
Der muss wohl schon froh sein, dass Sie Lust hatten, den Browser zu öffnen...

ZDNet.de Live

Eine ...

Eine Mitteilung betreffs des Teilens t.co/...

10.02.12, 10:20 von silicon_de
Socia ...

Social Networker bei Freunden wählerisch t.co/...

10.02.12, 10:20 von silicon_de
Micro ...

Microsoft kündigt Patches für Windows, Office und Internet Explorer an t.co/...

10.02.12, 09:50 von zdnet_de
Forsc ...

Forscher knacken PIN-Verschlüsselung von Google Wallet t.co/...

10.02.12, 09:30 von zdnet_de
Analy ...

Analyst: Lenovo set to dethrone HP in PC market. t.co/...

10.02.12, 09:21 von zdnetasia
iPhon ...

iPhone Apps schnüffeln mehr als man denkt t.co/...

10.02.12, 09:10 von silicon_de
Kodak ...

Kodak stellt Kamerageschäft ein t.co/...

10.02.12, 09:10 von zdnet_de
Onlin ...

Online retailers, not e-books, threat to bookstores. t.co/...

10.02.12, 08:52 von zdnetasia
M-ban ...

M-banking adoption outpacing security. t.co/...

10.02.12, 08:42 von zdnetasia
BTW ...

BTW blog by @eileenzdnetasia: Govt IT in need of transformation, basics must remain unchanged. t.co/...

10.02.12, 08:30 von zdnetasia
IBM ...

IBM to fix David Jones' online sales: t.co/...

10.02.12, 07:11 von zdnetaustralia
AFL ...

AFL fights Optus for its copyright: t.co/...

10.02.12, 07:04 von zdnetaustralia
Satel ...

Satellite-hating Libs blow policy free kick: t.co/...

10.02.12, 06:59 von zdnetaustralia
Watch ...

Watch as the world's largest screen, IMAX, be replaced t.co/...

10.02.12, 06:26 von zdnetaustralia
One ...

One podcast with the lot: t.co/...

10.02.12, 06:14 von zdnetaustralia
Optus ...

Optus fibre cable cut in ACT: t.co/...

10.02.12, 05:52 von zdnetaustralia
NAB ...

NAB glitch leaves customers cashless t.co/...

10.02.12, 05:41 von zdnetaustralia
Conro ...

Conroy sets spectrum renewal prices t.co/...

10.02.12, 05:25 von zdnetaustralia
Roll ...

Roll up, roll up! Oracle digest Taleo t.co/...

10.02.12, 05:10 von ZDNet
World ...

World's largest IMAX gets a new screen: photos t.co/...

10.02.12, 05:05 von zdnetaustralia