XML und do while Schleife, Knoten falsch

Bigbob

Mitglied
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
Java:
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:

Java:
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

Top Contributor
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]
Java:
<tabelle >
    <tab1_1>100</tab1_1>
    <tab1_2>Wert1</tab1_2>
    <tab1_3>L</tab1_3>
 

Bigbob

Mitglied
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

Top Contributor
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].
 

Ähnliche Java Themen

Neue Themen


Oben