XML Datei erzeugen mit Java

Hallo zusammen,

ich habe mal wieder ein kleines Problemchen: ich möchte eine XML Datei mit Java erstellen. Dass das in Java geht und auch wie es geht, ist einigermaßen klar. Aber die Lösungen die ich gefunden habe, gefallen mir nicht.

Mein Programm geht eine Datei Eintrag für Eintrag durch, verarbeitet jeden Eintrag und erzeugt daraus einen String. Diesen möchte ich zusammen mit noch ein paar Zusatzinformationen in einer XML Datei speichern.

Mit DOM muss ich erst den gesamten Inhalt der zu erzeugenden Datei im Speicher halten, und das kann verdammt viel werden. Von daher ist das nicht wirklich eine Lösung.

Mit StAX eine Datei zu erzeugen ist auch nicht weiter schwer, aber die Datei gefällt mir nicht. Alles wird in eine Zeile geschrieben und es ist dadurch sehr schwer, Sachen nachzuschauen oder nachträglich noch von Hand zu ändern.

Was ich also gerne hätte:

  • die Datei sollte Eintrag für Eintrag zu erzeugen sein ohne dass der komplette Inhalt im Speicher gehalten werden muss

  • die einzelnen Einträge sollten jeweils in eine neue Zeile kommen

Vielleicht habe ich auch einfach bei StAX was übersehen, und es kann eigentlich doch das, was ich will - da wäre ich dann auch für Hilfe dankbar :smile: Irgendwie finde ich die Sachen, die man zu XML und Java so findet, sehr verwirrend…

Gruß
Schorsch

Hi Schorsch,

Was ich also gerne hätte:

  • die Datei sollte Eintrag für Eintrag zu erzeugen sein ohne
    dass der komplette Inhalt im Speicher gehalten werden
    muss

  • die einzelnen Einträge sollten jeweils in eine neue Zeile
    kommen

org.jdom.output.XMLOutputter out =
new org.jdom.output.XMLOutputter(org.jdom.output.Format.getPrettyFormat())

Tut es das?

… Michael

org.jdom.output.XMLOutputter out =
new
org.jdom.output.XMLOutputter(org.jdom.output.Format.getPrettyFormat())

Tut es das?

… Michael

Hi Michael,

ich bin mir ziemlich sicher, dass ein schönes Format genau das ist, was ich gerne hätte. Aber DOM wollte ich eigentlich nicht einsetzen, da ich mit wirklich sehr vielen Einträgen arbeite. Und um den Speicher zu schonen wäre mir daher DOM nicht ganz so lieb.

Kann man das denn nicht auch mit einer Methode hinbekommen, bei der man die Datei sequentiell aufbaut? Im Zweifelsfall könnte man es ja schon fast mit einem normalen FileWriter schreiben, aber das wäre doch schon irgendwie ein bisschen seltsam :wink:

Gruß
Schorsch

Castor versuchen
Hallo Schorsch,

ich nutze schon seit vier Jahren die Castor-Bibliothek. Da erzeuge ich mir aus einem XSD via SourceGenerator die zugehörigen POJOs und arbeite mit denen im Speicher.

Da in deinem Beispiel jede Zeile dann unweigerlich in einer Zeilensammlung steckt, wird zum Schluss die Zeilensammlung per unmarshal in eine Datei geschrieben. Per Properties kann dabei auch festgelegt werden, dass z.B. ein indent (Einrücken) eingehalten wird.

Da ich bisher nur gute Erfahrungen mit Castor gemacht habe, empfehle ich dies eben weiter:
http://www.castor.org/

Ciao, Bill

Hallo Bill,

ich habe mir Castor mal ein bischen angeschaut. Ich habe irgendwie das Gefühl, das wäre mit Kanonen auf Spatzen geschossen. Aus XML Dateien Sourcecode zu machen und umgekehrt ist sehr interessant, und diese Möglichkeit kannte ich bisher nicht. Aber nur um ein paar Informationen in eine Datei zu schreiben diesen Umweg zu gehen… geht sicher, werde ich auch probieren, aber elegant finde ich es nicht.

Aber auf jeden Fall Danke für den Tipp.

Gruß
Schorsch

Hi Schorsch.

Ich weiß, dass dieses Rad schon tausend mal erfunden wurde, aber ich würde mir die Ausgabe selber schreiben. Kleine Rekursion, die deinen aktuellen Datenbank langläuft und jedes Objekt schriebt seinen Teil in die XML Datei. Die Einrückung kann man auch als Parameter übergeben.

Beim Lesen würde ich dann einen SAX-Handler verwenden, der dir direkt wieder deine eigenen Datenstruktur zusammenbaut.

Bisher habe ich damit die besten Erfahrungen gemacht.