~/home of geeks

XML Pull Parsing ganz klein

· 268 Wörter · 2 Minute(n) Lesedauer

Dieser Artikel ist Teil der Artikel-Serie "Tool of the day".

Früher oder später muss man in seinem Programm auch mit XML arbeiten, und sei es nur, um eine XML-basierte Konfigurationsdatei einzuladen.

Eine einfache Variante seine XML-Dokumente zu validieren und den Inhalt zur Verfügung zu stellen sind die große Zahl an XML-Java Binding APIs. In Java 1.6 gibt es dafür sogar das JAXP in der JDK. Bei der JDK 1.4 ist das nicht so einfach.

Entweder man schreibt seinen eigenen ContentHandler für SAX, oder wuselt alles in DOM ab, wobei das bei sehr langen und großen XML Dateien natürlich recht speicher fressend wird. Nun, der SAX Ansatz ist performanz technisch vielversprechender, aber man muss für diese Pushparsing API seine eigene State-Machine schreiben und verwalten. Viel einfacher geht es da mit Pull-Parsing, denn hier kann man einen einfachen Descent Parser schreiben, der rekurisv über Methodenaufrufe implementiert werden kann. Für XML Pull Parsing benötigt man jedoch wieder Libraries und damit Dependencies. Natürlich gibt es die Möglichkeit einen eigenen ContentHandler für SAX zu schreiben, der das Dokument komplett parst und die gefundenen Elemente auf einem Stack ablegt, um anschließend von einem Descent Parser verarbeitet zu werden (quasi Push-To-Pull Parsing). Aber auch dieser Ansatz legt das gesamte Dokument im Speicher ab.

Auf der Suche nach einer möglichst kleinen XML Pull API (ich wollte ja keine Dependencies, nur um meine Konfigurationsdatei zu verarbeiten) habe ich kXML 2 gefunden. kXML ist ein freier XML Pull Parser, der eine besondere Variante, den kXML-Mini, bietet. Diese für Handhelds ausgelegte Version besteht aus ganzen zwei Klassen und ist frei erhältlich.

Für kleinere und gekapselte Projekte, die auf den Komfort von XML nicht verzichten wollen, eine sehr gute Lösung.