#

XML Pull Parsing ganz klein

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 speicherfressend wird. Nun, der SAX Ansatz ist performanztechnisch viel versprechender, aber man muß 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.

Tags:, ,

One Response to “XML Pull Parsing ganz klein” »»

  1. Comment by Secco | 11:59 03.04.07|X

    Ãœbrigens vereinfacht sich die State-Ãœberwachung beim SAX ContentHandler, wenn man hierfür das passende Entwurfsmuster State benutzt.

Leave a Reply »»

Note: All comments are manually approved to avoid spam. So if your comment doesn't appear immediately, that's ok. Have patience, it can take some days until I have the time to approve my comments.