# XML und do while Schleife, Knoten falsch



## Bigbob (11. Mrz 2012)

Hallo zusammen, 

ich verzweifle gerade an der Erstellung eines XMLs basierend auf einer Hashmap, in welcher ich die Daten bis zur Ausgabe ablege.

Ich wollte eigentlich die Hashmap mit einer do-while Schleife auslesen und in ein XML schreiben.

Die Hashmap besteht aus einem String und einer Arraylist

```
HashMap<String, ArrayList>
```

Das ganz in die Hashmap schreiben und wieder lesen klappt wunderbar, nur das XML mit JDOM will nicht so wie ich es gerne hätte.

Ich schreibe das XML wie folgt:


```
public static void create() {
    Element root = new Element("output");
    
    Document dokument = new Document(root);
                 root.addContent(new Element("daten")
                     .addContent(new Element("name").addContent( String.valueOf(checkUser.GET_Name()) ))
					 ...
                     )
                   
					.addContent(new Element("tabelle"));
                 
		                 int cntmain=1, cntsub = 1;
		                 do{
		 	         		Iterator it = helper.getItems(helper.hamp, String.valueOf(cntmain)).iterator();
			         		while (it.hasNext())
			         		{
			         			root.addContent(new Element("tab"+ String.valueOf(cntmain) + "_" + String.valueOf(cntsub)).addContent(String.valueOf(it.next())));
			         			cntsub++;
			         		}
		                     cntmain++;
		                     cntsub= 1;
		                 } while(lana<10);
                     
				     
					
   
                     XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
                     FileOutputStream output = null;
					try {
						output = new FileOutputStream("file.xml");
					} catch (FileNotFoundException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
```

Leider werden die Daten aus der Hashmap nicht richtig in den Knoten Tabelle geschrieben, das XML sieht wie folgt aus:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<output>
  <daten>
    <name>Max Mustermann</name>
  </daten>
  <daten2>
    <Firma>Elektro Stromschlag</Firma>
  </daten2>
  <tabelle />
  <tab1_1>100</tab1_1>
  <tab1_2>Wert1</tab1_2>
  <tab1_3>L</tab1_3>
  <tab1_4>L</tab1_4>
  <tab1_5>null</tab1_5>
  <tab2_1>140</tab2_1>
  <tab2_2>Wert2</tab2_2>
  <tab2_3>L</tab2_3>
  <tab2_4>L</tab2_4>
  <tab2_5>null</tab2_5>
  <tab3_1>160</tab3_1>
  <tab3_2>Wert3</tab3_2>
  <tab3_3>P</tab3_3>
  <tab3_4>F</tab3_4>
  <tab3_5>null</tab3_5>
  ...
</output>[/XML]

Eigentlich hätte ich es aber gerne wie folgt, was m.E. auch richtig wäre:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<output>
  <daten>
    <name>Max Mustermann</name>
  </daten>
  <daten2>
    <Firma>Elektro Stromschlag</Firma>
  </daten2>
  <tabelle />
    <tab1_1>100</tab1_1>
    <tab1_2>Wert1</tab1_2>
    <tab1_3>L</tab1_3>
    <tab1_4>L</tab1_4>
    <tab1_5>null</tab1_5>
    <tab2_1>140</tab2_1>
    <tab2_2>Wert2</tab2_2>
    <tab2_3>L</tab2_3>
    <tab2_4>L</tab2_4>
    <tab2_5>null</tab2_5>
    <tab3_1>160</tab3_1>
    <tab3_2>Wert3</tab3_2>
    <tab3_3>P</tab3_3>
    <tab3_4>F</tab3_4>
    <tab3_5>null</tab3_5>
  ...
  </tabelle>
</output>[/XML]

Egal was ich versuche, ich krieg das irgendwie nicht hin, vielleicht könnte von Euch einer draufschauen und mir sagen, was ich noch machen könnte.

Vielen Dank im Voraus, 

Viele Grüße
Jochen


----------



## Final_Striker (11. Mrz 2012)

Irgendwie kann ich zwischen deinen beiden Beispiele keinen unterschied finden, außer, dass das zweite falsch formatiert ist.


----------



## Bigbob (11. Mrz 2012)

Final_Striker hat gesagt.:


> Irgendwie kann ich zwischen deinen beiden Beispiele keinen unterschied finden, außer, dass das zweite falsch formatiert ist.


Hallo Final_Striker,

was ist denn am Beispiel 2 falsch? Ich hätte eher gesagt, dass Beispiel 1 falsch formatiert ist.

Gruß Jochen


----------



## Final_Striker (11. Mrz 2012)

Bigbob hat gesagt.:


> was ist denn am Beispiel 2 falsch? Ich hätte eher gesagt, dass Beispiel 1 falsch formatiert ist.



Nein die [c]tabX[/c] liegen ja nicht in [c]tabelle[/c], dürfen also auch nicht eingerückt werden.

So wäre das ok, aber dein [c]tabelle [/c] Element wird am Ende geschlossen.  [c]<tabelle />[/c]

```
<tabelle >
    <tab1_1>100</tab1_1>
    <tab1_2>Wert1</tab1_2>
    <tab1_3>L</tab1_3>
```


----------



## Bigbob (11. Mrz 2012)

Ich hätte es ja gerne, das [c]tabX[/c] in [c]Tabelle[/c] wäre, aber ich schaffe das mit meiner Schleife nicht.

Sprich am liebsten hätte ich es so:
[XML]
<tabelle>
  <tab1>
    <tab1_1>100</tab1_1>
    <tab1_2>Wert1</tab1_2>
    <tab1_3>L</tab1_3>
    <tab1_4>L</tab1_4>
    <tab1_5>null</tab1_5>
  </tab1>
  <tab2>
    <tab2_1>140</tab2_1>
    <tab2_2>Wert2</tab2_2>
    <tab2_3>L</tab2_3>
    <tab2_4>L</tab2_4>
    <tab2_5>null</tab2_5>
  </tab2>
</tabelle>
[/XML]
Aber das kriege ich leider nicht hin.


----------



## Landei (11. Mrz 2012)

Bevor du weiter am Code rumschraubst solltest du dir klar machen, dass diese Idee schlecht ist. Wirklich ganz schlecht. Man muss dann nämlich Tag-Namen erst mal zusammenstückeln oder parsen, um sie vernünftig lesen zu können. Ein Tag-Name soll sagen, *was *da drinsteht, nicht *wo*. So eine Numerierung ist ungefähr so, wie in Java hunderte Variaben auf diese Weise zu benennen - und niemand kann in einer Schleife oder so drauf zugreifen, höchstens mit Reflection.

Eine Lösung ist, die Koordinaten ganz wegzulassen, schließlich stellt ja schon die XML-Struktur sicher, dass jedem tab eine Stelle zugeordnet ist. Ein Browser kommt auch mit HTML-Tabellen zurecht (obwohl die wesentlich komplexer sind, da Zellen über mehrere Spalten oder Zeilen gehen können). 

Wenn du das nicht willst, ist es immer noch wesentlich besser, dafür Attribute zu verwenden: [c]<tab x="13" y="42">bla</tab>[/c].


----------

