# von Java Gui xml Datei erstellen



## w_wintersun (28. Mai 2010)

Hallo Forummitglieder,

Ich möchte gerne wissen, wie man von einem Java Gui ein xml Datei erstellen kann. Ich habe ein java Gui programmiert und darauf gibt es mehrere Informationen. Ich will die Informationen in eine xml-Datei  ( als xml-Code ) mit dem java-Code speichern aber weiß ich nicht wie es ist 

Kann jemand mir helfen, wie ich machen soll..

Danke im Voraus!

Lg.


----------



## zerix (28. Mai 2010)

Hallo,

was möchtest du denn genau in der XML-Datei speichern? Das hab ich jetzt hier noch nicht so richtig verstanden.

Gruß

Sascha


----------



## Carron (28. Mai 2010)

Hi,

um aus Java heraus XML-Dateien zu erzeugen bieten sich grundsätzlich mehrere Möglichkeiten.
Neben dem "von Hand" Schreiben via Streams, sind hier gewisse Bibliotheken wie SAX oder JDOM zu nennen. Letztere nutzen wir in meinem aktuellen Projekt zum Erzeugen unseres eigenen XML-basierten Formats. (Zum Lesen nutzen wir kurioserweise den SAXBuilder, aber dafür war ich nich zuständig  )

Bei deiner Beschreibung würde ich von einem bereits existenten Datenmodell ausgehen, welches im Idealfall ein übergeordnetes (root) Element enthält, und das Ganze könnte dann ungefähr so aussehen:


```
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;

public class XMLControl {

        public static void saveProject(DeinModelRoot root, File path) {
                final Document doc = createXmlDocument(root);
                try {
                        // XML Outputter erzeugen
                        final XMLOutputter xmlOutput = new XMLOutputter();
                        // FileOutputStream für Festplattenzugriff
                        final FileOutputStream fileStream = new FileOutputStream(path);
                        final OutputStreamWriter outputStream = new OutputStreamWriter(fileStream, "UTF-8");
                        // erzeugtes Dokument übergeben
                        xmlOutput.output(doc, outputStream);
                        // Streams zum Schreiben nötigen
                        outputStream.flush();
                        fileStream.flush();
                        // Streams wieder schließen
                        outputStream.close();
                        fileStream.close();
                } catch (IOException ioe) {
                        // damit sollte man versuchen irgendwie umzugehen (wie es in deiner Anwendung üblich ist)
                        ioe.printStackTrace();
                }
        }

        private Document createXmlDocument(DeinModelRoot root) {
                final Document doc = new Document();
                // XML-Root anlegen
                final Element rootElement = new Element("NameDeinModelRoot");
                // Attribute übernehmen (sofern vorhanden)
                rootElement.setAttribute("NameDeinModelRootAttribut", "WertDeinModelRootAttribut");

                // XML-Root hinterlegen
                doc.setRootElement(rootElement);

                for (DeinModelKindElement singleChildElement : root.getKindElemente()) {
                        // Kindelemente auslesen und hinzufügen
                        rootElement.addContent(createChildElement(singleChildElement));
                }

                return doc
        }

        private Element createChildElement(DeinModelKindElement singleChildElement) {
                final Element child = new Element("NameDeinModelKind");
                // Attribute übernehmen (sofern vorhanden)
                child.setAttribute("NameDeinModelKindAttribut", "WertDeinModelRootAttribut");

                return child;
        }

}
```

Zu dieser späten Stunde hatte ich nun keine Muße das Ganze noch zu testen, daher hoffe ich ist dir auch so geholfen 
Entsprechende PseudoCode Bestandteile sind natürlich durch die Entsprechungen in deiner Anwendung zu ersetzen.


Gute Nacht und Grüße
Carron


----------

