XML Dokument mit JDOM

schlunzer

Grünschnabel
Hallo, habe schon das ganze Forum durchsucht, aber leider keine Lösung fü mein Problem gefunden.

Ich möchte aus einer bestehenden Datenstruktur eine XML Datei erstellen, die die folgende Struktur haben soll.
<Produkt name="A" art="Produkt"/>
<Teil name="B" menge="10"/>
<Teil name="C" menge="1"/>
</Produkt>
<Produkt ...>
...
</Produkt>

Ich bekomme es hin durch meine Datenstruktur durchzugehen und alle Werte in der Console auszugeben, aber mein Code schreibt immer nur das letzte Element in die XML Datei.
Code:
package xml;

import java.io.*;
import java.util.*;
import java.util.Iterator;
import java.util.LinkedList;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import produktiosplan.ProduktBeschreibung;
import produktiosplan.ProduktStruktur;
import spiel.Marktplatz;

public class Erstellen{
	
	public void erstelleNachricht2() throws IOException{
		
		ProduktStruktur ps = ProduktStruktur.getInstance();
		String produkt = "Produkt";
		String teil = "Teil";
		Iterator<ProduktBeschreibung> it = ps.getZusammensetzung().iterator();		
		
		while(it.hasNext()){
			root.setText("");		
			Element prodEle= new Element(produkt);
			Element teilEle = new Element(teil);
			prodEle.addContent(teilEle);
			root.addContent(prodEle);
			ProduktBeschreibung tmp = it.next();		
			if (tmp.getArt().equals("Rohstoff")){
				
				System.out.println("Rostoff");
//				Attribute setzen
				System.out.println(tmp.getName());
				System.out.println(tmp.getArt());
				prodEle.setAttribute("name", tmp.getName()).setAttribute("art", tmp.getArt());	
				root.addContent(prodEle);
			}
			else
			{
				System.out.println(tmp.getName());
				System.out.println(tmp.getArt());
				Iterator it2 = tmp.getZusammensetzung().iterator();
				System.out.println("Kein Rostoff, sondern " + tmp.getArt());
				prodEle.setAttribute("name", tmp.getName()).setAttribute("art", tmp.getArt());	
				while (it2.hasNext()){
					prodEle.addContent(new Element(produkt).setAttribute("name", tmp.getName()).setAttribute("art", tmp.getArt()));
					prodEle.setAttribute("name", tmp.getName()).setAttribute("art", tmp.getArt());
					String tmp1 = (String) it2.next();
					System.out.println("Teilename:"+ tmp1.charAt(0));
					System.out.println("Teilmenge:"+ tmp1.charAt(2));
//					Attribute setzen
					teilEle.setAttribute("name", String.valueOf(tmp1.charAt(0))).setAttribute("menge",String.valueOf(tmp1.charAt(2)));
					prodEle.setText("");
					prodEle.addContent(teilEle);
				}
				}
			}
			
		Document doc = new Document(root);
		File file = new File("d:\\File.xml");
		FileOutputStream out = new FileOutputStream(file);
		XMLOutputter serializer= new XMLOutputter(Format.getPrettyFormat());
		serializer.output(doc, out);
		System.out.println(doc);
	}
}

Schonmal vielen Dank!
 
Hi schlunzer,

also in deinem XML-Document, liegt jeweils nur das letzte Element aus deiner Datenstruktur.

Wenn ich das richtig sehe, liegt das an
Java:
root.setText("");

Damit löscht du bei jedem Schleifendurchlauf das was du vorher in dein Root-Element abgelegt hast (siehe API). Ich würde die Anweisung einfach weg lassen. Macht an der Stelle imo keinen Sinn.

Grüße
Daniel
 
Vielen Dank, Daniel!

Genau daran hat es gelegen!

Jetzt es wie angedacht, mußte nur noch bei meinen anderen Elementen auch das setText("") wegnehmen und jetzt läuft es.

Nochmal Danke!!
 
Zurück