IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Java - Einfacher und überall einsetzbarer XML-Reader in JAVA



Einfacher und überall einsetzbarer XML-Reader in JAVA

Der folgende Artikel behandelt die Programmierung eines so genannten XML Pull Parsers und eines Serializers.


Autor: Robert Schrenk (Morraldor)
Datum: 17-03-2004, 21:05:19
Referenzen: keine
Schwierigkeit: Profis
Ansichten: 10476x
Rating: 7.33 (3x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



XML allgemein

Die Struktur einer XML-Datei ist sehr einfach aufgebaut. Jedes Element wird mit <elementname> eingeleitet und mit </elementname> beendet. Dabei können beim Starttag noch zusätzliche Attribute angefügt werden. Etwa <elementname höhe="20" breite="20">.

Standardmäßig sollten die Werte dieser Attribute mit Apostrophen (") abgegrenzt sein. Jedoch wird diese Konvention von vielen Programmieren (speziell bei HTML) nicht eingehalten. Der hier vorgestellte XML-Reader ignoriert diese Attribute derzeit noch, sollte jemand hier eine Änderung benötigen helfe ich gerne dies einzubauen. Doch nun zum XMLPullParser und -Writer.

(Es empfiehlt sich parallel zu diesem Artikel den Code anzusehen, um diesen besser verstehen zu können. [pullparser.rar])

Der XML Pull Parser

Das Paket besteht aus 3 Klassen, wobei der XML Pull Writer alleine funktioniert, und der XML Pull Parser die XML-Datei als XML-Element einliest und dieses XML-Element alle übrigen XML-Elemente enthält.

Der XML Pull Parser besteht somit aus 2 Klassen. Der XML Pull Parser hat die Aufgabe den Stream der Datei oder URL zu öffnen und den Inhalt einzulesen. Dann sucht der Parser das erste Element, welches auch geschlossen wird. Also wird etwa der <xml …> Tag ebenfalls ignoriert, da wir annehmen, dass es sich um eine normale XML-Struktur handelt und die Codierung nicht außergewöhnlich ist.

Im Falle von HTML wäre das der Bereich von <html> bis </html> bei RSS wäre es von <rdf attribute…> bis </rdf>. Dieses erste Element (welches alle übrigen Elemente umschließen muss) wird dann als XML-Element instanziert. Dieses XML-Element durchsucht den eigenen Textbereich und fügt sich selbst neue Subitems hinzu. Somit erhält man nach Ende des Parsens eine hierarchische Struktur, wie sie auch in der XML-Datei vorhanden ist.

Die restliche Implementierung, also wie die XML-Elemente analysiert und ausgelesen werden, muss der User mit Schleifen selbst programmieren, was aber kein allzu großer Aufwand ist.

Der hier vorgestellte XML Pull Parser ist also, wie oben beschrieben, die einfachste Möglichkeit eine XML-Datei zu lesen und daher habe ich absichtlich auf alle fehleranfälligen Methoden verzichtet.

Der XML Pull Writer

Der XML Pull Writer ist ähnlich einfach aufgebaut. Bei der Instanzierung gibt man einen Dateinamen an. Die Datei wird angelegt, oder überschrieben. Mit writer.StartDocument() wird der <xml..> Tag geschrieben. Hierbei wird als Codierung automatisch UTF-8 genommen (dies ist aber nur Alibihalber, da es für diesen Writer völlig egal ist).

Um die Arbeit zu vereinfachen habe ich in allen Klassen, die ich speichern möchte eine toXML(XMLPullWriter writer) implementiert, damit sich jede Klasse "selbst speichern" kann.

Hierbei sind zwei Methoden wichtig. Mit writer.startElement(String elementname) wird ein neues Element/Subelemente angefügt, bis es mit writer.endElement(String elementname) geschlossen wird. Dabei überprüft der XML Pull Writer, ob die Elemente ordnungsgemäß geschlossen werden, da er den Vorgang ansonsten abbricht.

Um einen Wert in der XML-Datei zu speichern, muss man zwischen writer.startElement(..) und writer.endElement(..) die writer.outText(String wert)-Methode aufrufen. Um die Datei wieder zu schließen benutzt man writer.endDocument(), wobei auch hier überprüft wird, ob wirklich alle Elemente geschlossen wurden.

Viel Erfolg beim Implementieren!!


paedubucher
Professonial
Beitrag vom:
03-06-2007, 17:16:35

Schlechter Vergleich

Zitat:
"Jedoch wird diese Konvention von vielen Programmieren (speziell bei HTML) nicht eingehalten."

HTML basiert auf SGML, XHTML würde dann wirklich auf XML basieren. Dieser Vergleich ist dir nicht ganz gelungen...

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06246
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1154
Comments: 0