# Lesen/Schreiben von XML Datei



## Maxim6394 (22. Feb 2012)

Ich will eine hierarchische struktur in eine xml datei schreiben, dabei sollten beliebig viele nodes als childs von einer parent node vorhanden sein können. 
bis jetzt sieht das bei mir so aus:
[XML]<Root>

<Node ID="0" name="Node" localTranslation="(0.0, 0.0, 0.0)"/>

<Node ID="1" name="Node" localTranslation="(0.0, 0.0, 0.0)"><Node ID="0" name="Node" localTranslation="(0.0, 0.0, 0.0)"/><Node ID="1" name="Node" localTranslation="(0.0, 0.0, 0.0)"/>
</Node>

<Node ID="2" name="Node" localTranslation="(0.0, 0.0, 0.0)"><Node ID="0" name="Node" localTranslation="(0.0, 0.0, 0.0)"/>
</Node>

</Root>[/XML]

das einlesen funktioniert nicht so gut, da wird zum beispiel angezeigt dass node mit ID=1 4 childs hat, die node mit der ID=2 hat 2, was natürlich nicht stimmt. hab ich beim schreiben was falsch gemacht oder wird das falsch ausgelesen?


----------



## dzim (22. Feb 2012)

Womit liest du es ein?

Ich empfehle gern JaxB - weil es so schön einfach ist.
Wenn du es mächtiger haben willst, nimm EMF - das ist auf alle Fälle flexibler.


----------



## Wildcard (22. Feb 2012)

Deine IDs sind mehrfach belegt. Ist das Absicht? Wenn ja, würde ich das nicht unbedingt ID nennen...


----------



## dzim (23. Feb 2012)

Hehe - stimmt!
Das ist ja schon so trivial, damit hab ich nicht gerechnet :-D


----------



## Maxim6394 (25. Feb 2012)

auch wenn ich ID entferne wird es noch falsch angezeigt. eines der elemente hat zum beispiel genau 2 childs, das ist auch im browser richtig zu erkennen. in dieser for schleife wird aber für node nr.2 4 angezeigt:


```
for(int s=0; s<tags.getLength() ; s++){
System.out.println(tags.item(s).getChildNodes().getLength()+"|"+tags.item(s).getNodeName());
                 }
```

für diese xml datei:
[XML]<Root><Node  name="Node" localTranslation="(0.0, 0.0, 0.0)"></Node>
<Node  name="Node" localTranslation="(0.0, 0.0, 0.0)"><Node  name="Node" localTranslation="(0.0, 0.0, 0.0)"></Node>
<Node  name="Node" localTranslation="(0.0, 0.0, 0.0)"></Node>
</Node>
<Node  name="Node" localTranslation="(0.0, 0.0, 0.0)"></Node>
</Root>
[/XML]


----------



## Maxim6394 (26. Feb 2012)

ich bin immernoch die ganze zeit am testen. ich hab zum beispiel folgende xml datei:
[XML]<Root> </Root>[/XML]

man könnte denken es gibt als anzahl der child nodes von root 0 aus, aber es kommt immer 1, was ich überhaupt nicht verstehe. dann hab ich versucht den nodename auszugeben:

```
System.out.println(root.getFirstChild().getNodeName());
```
es gibt folgendes aus:





> #text



jemand ne idee was zum teufel da läuft? ich benutze übrigens org.w3c.dom


----------



## Wildcard (27. Feb 2012)

Auch Text sind Knoten. In dem Fall " ".


----------



## Maxim6394 (28. Feb 2012)

ich dachte Knoten stehen nur in < und >. hab ich irgendwas falsch verstanden?


----------



## Guybrush Threepwood (28. Feb 2012)

Und da gäbe es noch ein paar turboeinfache Lösungen wie java.beans.XMLEncoder oder XStream, sofern es nur darum geht xml zu serialisieren oder zu deserialisieren.


----------



## Wildcard (28. Feb 2012)

Maxim6394 hat gesagt.:


> ich dachte Knoten stehen nur in < und >. hab ich irgendwas falsch verstanden?



Hast du falsch verstanden. Auch Text zwischen den Tags und Whitespace wird als Knoten im DOM behandelt.
Node (Java 2 Platform SE v1.4.2)


----------

