# XML Datei erstellen und Daten daraus in Java auslesen



## kakulala (25. Jul 2017)

Hallo Leute, 
ich bin noch nicht so bewandert in Java & bräuchte mal eure Hilfe. Ich soll eine XML datei erstellen in der ein Pfadname (Verzeichnis) drinsteht, das dann in Java ausgelesen wird & auf diese Datei mit Java zugegriffen werden kann. (in der XML sollen noch mehr sachen stehen, aber ich denke wenn ich das Grundprinzip mal drauf hab, schaff ich das schon  )  Hintergrund: falls sich das Verzeichnis ändert, muss man nur das XML-Dokument ändern & nicht in den Code selber gehen. Jetzt bin ich wie gesagt nicht sehr bewandert darin & bräuchte hilfe. 
Könnt ihr mir ein paar Schlagwörter nennen, Seiten, Beispiele o.ä. damit ich mich da mal reinlesen kann bzw mir was dazu anschauen kann. Worauf muss ich achten? Wie muss ich es angehen?


----------



## thet1983 (25. Jul 2017)

JAXB
JAXB
SAX oder DOM


----------



## kakulala (25. Jul 2017)

Hab jetzt JDOM gefunden, soll sehr Java ähnlich sein. Welches würdest du denn empfehlen?


----------



## thet1983 (25. Jul 2017)

ich persönlich nehme (fast) immer JAXB.


----------



## krgewb (18. Aug 2017)

Auf folgender Webseite steht links "Programme, ca. 12,8 MB":
http://openbook.rheinwerk-verlag.de/javainsel/
Lade dir die Zip-Datei herunter. Da sind gute Beispiele.

Ich habe es wie letztendlich folgt gemacht (ich habe Objekt "model" meiner Klasse "Model" gespeichert):

```
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
JAXB.marshal(model, osw);
String commentary = "<!-- Created by sdfdf -->";
osw.write(commentary);
osw.close();
```

Dabei darf man aber nicht vergessen, den Standard-Konstruktor explizit hinzuschreiben:

```
public Model() {

}
```

Und über den Get-Methoden in meiner Model-Klasse muss ein XmlElement-Tag sein:

```
@XmlElement(name = "htdfhbxe")
```

Um eine XML-Datei zu laden:

```
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser parser = saxParserFactory.newSAXParser();
DefaultHandler myHandler = new MySAXHandler(mainWindow, xmlFile);
parser.parse(xmlFile, myHandler);
```

Wobei MySAXHandler eine eigene Klasse von mir ist, die von Default Handler erbt.
Dort muss es u.a. solch eine Methode geben:

```
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) {
   ...
}
```

In "startElement" kannst du über qName abfragen und über atts.getLength() iterieren:

```
if (qName.equals("zteutf")) {
    for (int i = 0; i < atts.getLength(); i++) {
        if (atts.getQName(i).equals("irtdf")) {
            ...
        }
    }
}
```


----------



## krgewb (22. Aug 2017)

Hast du es geschafft?


----------



## kakulala (25. Aug 2017)

krgewb hat gesagt.:


> Hast du es geschafft?


Vielen Dank! Ich hab das eigentliche Problem zwar mit einer txt-Datei gelöst, aber nun mit deiner Hilfe auf xml "umgerüstet". Vielen DANK!


----------

