Probleme mit jdom

Status
Nicht offen für weitere Antworten.

Paladin

Bekanntes Mitglied
Hi,

ich schreibe gerade an einem Programm welches als Ergebnis eine xml-Datei ausspuckt.
Da ich bis jetzt mit SAX Builder und JDOM noch nichts gemacht habe ist das allerdings noch
absolutes neuland für mich.

Zu meinem Problem: während der Erstellung der xml Datei bricht das Programm mit u.a. folgendem Fehler ab:
org.jdom.IllegalAddException: The element already has an existing parent "DatensatzNr1"

Wenn die for Schleife nur ein mal ausgeführt wird tritt der Fehler nicht auf, aber sobald sie mehr als
ein mal ausgeführt wird kommt es zu dem Fehler.

Hier ist das Stück Source welches den Fehler verursacht:

Code:
//...
for(i=0; i<tM_element.getRowCount(); i++) {           //tM_element = DefaultTableModel
   e_datensatz[i] = new Element("DatensatzNr" + (i+1));      //e_datensatz = Element[]
   if(tM_element.getValueAt(i, 2).equals("PGoto")) {
      e_id.setText(String.valueOf(tM_element.getValueAt(i, 0)));            //e_id, e_name, e_type... = Elemente
      e_name.setText(String.valueOf(tM_attribut.getValueAt(1, 1)));
      e_type.setText(String.valueOf(tM_attribut.getValueAt(2, 1)));
      e_prompt.setText(String.valueOf(tM_attribut.getValueAt(3, 1)));
      e_gotoNr.setText(String.valueOf(tM_attribut.getValueAt(4, 1)));
      e_gotowww.setText(String.valueOf(tM_attribut.getValueAt(5, 1)));
								
      e_datensatz[i].addContent(e_id);    //hier tritt der Fehler bei der 2. Ausführung auf  
      e_datensatz[i].addContent(e_name);
      e_datensatz[i].addContent(e_type);
      e_datensatz[i].addContent(e_prompt);
      e_datensatz[i].addContent(e_gotoNr);
      e_datensatz[i].addContent(e_gotowww);						
   }					
   e_data.addContent(e_datensatz[i]);		
}
//...

So ich hoffe ich habe euch genügend Informationen zu dem Problem gegeben. Ich würde mich
echt freuen wenn jemand von euch sich mein Problem mal ansehen könnte und mir einen Hinweis geben
könnte.

Vielen dank im voraus

Gruß

Paladin
 

foobar

Top Contributor
Was speicherst du denn in e_datensatz? Wird das Array bei jedem Durchlauf neu initialisiert? Was genau ist Ziel des ganzen?
 

bummerland

Top Contributor
du legst sicher vor der schleife die elemente an. also Element e_di;.
daher wird in der schleife jedesmal versucht, das gleiche objekt hinzuzufügen. beim ersten mal klappts. beim zweiten mal natürlich nicht mehr, weil das element ja schon mal hinzugefügt wurde. Sagt ja auch die Fehlermeldung: "The element already has an existing parent" ist klar was ich meine? Du musst in der schleife immer ein neues Element anlegen.
 

Paladin

Bekanntes Mitglied
@ becstift:
Das Element e_Datensatz[] ist als Array definiert und in der Schleife benutze ich immer e_Datensatz also müsste ja eigentlich jedes Element des Arrays ein eigenes Element Objekt sein.
Darum verstehe ich auch diese Fehlermeldung gar nicht.

@ foobar:
e_Datensatz ist ein Unterpunkt des xml Dokuments in dem id, name, typ und noch ein paar andere andere Informationen zu einem bestimmten Datensatz gespeichert werden sollen. Das ganze sieht dann vereinfacht so aus:
<DatensatzNr1>
<id>1</id>
<name>Text</name>
<typ>Elemnttyp</typ>
...
</Datensatz1>

Ich werde mal den rest des Codes der Funktion hinschreiben. Ich habe das am Anfang nicht gemacht weil ich keinen mit einem ewig langen Source Code vergraulen wollte.

Zu der Funktion: Diese Funktion soll im Programm immer dann aufgerufen werden, wenn der User Daten in
der GUI ändert.


Code:
public void createXML() {
    Element e_header = new Element("Header");
    Element e_data = new Element("Data");
    Element e_root = new Element("SpeechDialog");
    Element e_dateiname = new Element("Dateiname");
    Element e_laender = new Element("Letzte_Aenderung");
    Element e_anzahlDS = new Element("AnzahlDS");
    Element e_datensatz[] = new Element[100];       
    Element e_id = new Element("ID");
    Element e_name = new Element("name");
    Element e_type = new Element("type");
    Element e_prompt = new Element("prompt");
    Element e_gotoNr = new Element("gotoNr");
    Element e_gotowww = new Element("gotowww");
				
    int i = 0;                        
    for(i=0;i<100;i++) {        //Inititialisierung von e_Datensatz
        e_datensatz[i]=null;
    }
    
    SAXBuilder builder = new SAXBuilder();
    Document doc = new Document(e_root);
    try {
        doc = builder.build(new File("Test.xml"));
    } 
    catch (JDOMException e) {
        System.out.println(e);
    }
			
    doc.setRootElement(e_root);        
    e_dateiname.setText("Test.xml");
    e_laender.setText(String.valueOf(calendar.getTime().getHours() + ":" + calendar.getTime().getMinutes() + ":" + calendar.getTime().getSeconds() + " - " + calendar.getTime().getDay() + "." + calendar.getTime().getMonth() + "."));    
    e_anzahlDS.setText(String.valueOf(tM_element.getRowCount()));
		
    for(i=0; i<tM_element.getRowCount(); i++) {      //Das ist der Teil den ich im vorigen Posting abgebildet habe
        e_datensatz[i] = new Element("DatensatzNr" + (i+1));
        if(tM_element.getValueAt(i, 2).equals("PGoto")) {
            e_id.setText(String.valueOf(tM_element.getValueAt(i, 0)));
            e_name.setText(String.valueOf(tM_attribut.getValueAt(1, 1)));
            e_type.setText(String.valueOf(tM_attribut.getValueAt(2, 1)));
            e_prompt.setText(String.valueOf(tM_attribut.getValueAt(3, 1)));
            e_gotoNr.setText(String.valueOf(tM_attribut.getValueAt(4, 1)));
            e_gotowww.setText(String.valueOf(tM_attribut.getValueAt(5, 1)));
								
            e_datensatz[i].addContent(e_id);
            e_datensatz[i].addContent(e_name);
            e_datensatz[i].addContent(e_type);
            e_datensatz[i].addContent(e_prompt);
            e_datensatz[i].addContent(e_gotoNr);
            e_datensatz[i].addContent(e_gotowww);						
        }					
        e_data.addContent(e_datensatz[i]);		
        }
        e_root.addContent(e_header);
        e_root.addContent(e_data);
        e_header.addContent(e_dateiname);
        e_header.addContent(e_laender);
        e_header.addContent(e_anzahlDS);
	
        XMLOutputter outp = new XMLOutputter();
        try {
            outp.output(doc, new FileOutputStream(file));
        } 
        catch (Exception e1) {
            System.out.println(e1);
        }
    }


Ist nicht gerade toll, dass ich hier so viel Source Code hinschreibe aber vielleicht hilfts ja weiter.

Auf jeden Fall vielen Dank an becstift und foobar, dass ihr euch das Ding angeguckt habt.

Gruß

Paladin
 

foobar

Top Contributor
Ich vermute mal tM_attribut und tM_element sind Tablemodels. Warum holst du dir dann bei jedem Durchlauf das selbe Element? So würd das viel mehr Sinn machen:
Code:
 e_id.setText(String.valueOf(tM_element.getValueAt(i, i)));
Warum speicherst du die Element in der For-Schleife überhaupt in einem Array? Ein Objekt wäre vollkommen ausreichend, da du die Elemente sowieso nur an das Root-Element hängen willst.
 

Paladin

Bekanntes Mitglied
Hi Foobar,

es ist nicht immer das selbe Element, da tM_element ein Tablemodel für eine 2 Dimensionale Tabelle ist.
Ich hole mir mit .getValueAt(i, 2) immer das Feld in welchem der Benutzer eine Eingabe machen kann.

Das mit dem Array habe ich nur ausprobiert als ich einfach nicht mehr weiter gekommen bin. (Allerdings hat es mir auch nicht weitergeholfen.)
Ich werde das wieder ändern.

Gruß

Paladin
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Probleme mit JDom . addContent(int index,Collection c) XML & JSON 2
S Probleme mit Jdom XML & JSON 3
Kirby.exe Probleme mit XML XPATH Select XML & JSON 3
N Probleme bei der Formatierung beim Einfügen und löschen über DOM XML & JSON 7
G Probleme mit Jsoup in .jar File XML & JSON 11
K JAX-WS Bindin-Probleme XML & JSON 1
B Probleme mit RelativeLayout XML & JSON 1
L Jackson JSON: Probleme beim einlesen XML & JSON 1
K XOM Builder Probleme XML & JSON 3
N Jsoup: PHP-Tags bereiten Probleme? XML & JSON 2
M SAX-Parsing Probleme XML & JSON 23
M Probleme mit XPath bei Java XML & JSON 5
hdi Probleme beim Erstellen einer XML XML & JSON 7
F Probleme beim html parsen mit tagsoup XML & JSON 4
M Probleme beim Parsen eines gefilterten XML-Dokuments XML & JSON 6
H JAXB Probleme beim Unmarshalling XML & JSON 3
G Probleme mit XML und JTree XML & JSON 9
klattiator Probleme mit Codierung XML & JSON 3
S Probleme beim erstellen einer Jar XML & JSON 12
T XML und Sonderzeichen, Probleme mit ASP.NET Server XML & JSON 2
G Probleme mit Namespaces XML & JSON 5
D Probleme mit Eclipse Modeling Framework (EMF) XML & JSON 2
S PDF Erzeugung - Probleme mit der XML Datei bei Schema-Infos XML & JSON 2
C SAX Probleme beim lesen XML & JSON 4
F JAXB - Nachträglich hinzugefügter Code macht Probleme XML & JSON 2
D Probleme beim SAX parsing XML & JSON 4
F Unmarshall Probleme XML & JSON 5
byte Probleme beim Parsen von XHTML-Datei XML & JSON 4
R Probleme mit Transformer und StreamResult XML & JSON 4
C Probleme mit Include XML & JSON 10
C POI + jXLS Probleme XML & JSON 3
B DOM DTD laden abschalten, Probleme mit Doctypes und PIs XML & JSON 2
G probleme mit package XML & JSON 12
M Probleme mit String XML & JSON 3
H Probleme mit xmlrpc und php XML & JSON 13
B Probleme mit Zugriff auf eXist-Datenbank XML & JSON 9
H Neu bei JAVA- Probleme mit der Integration von Xerces XML & JSON 3
R JAVA und DOM, probleme beim einfügen von elementen ?????? XML & JSON 6
P JDOM oder SAX XML & JSON 3
Hijo2006 Grundsätzliches zu JDOM 2.x XML & JSON 1
W Kindelemente mit JDOM eines bestimmten Attributes auslesen XML & JSON 6
S JDOM XML Datei darstellen Fehler! XML & JSON 2
S JDom XML ein Element hinzufügen. XML & JSON 1
C JDOM: Value ohne Unterelemente auslesen XML & JSON 1
Z XML Datei mit JDOM einlesen und verarbeiten XML & JSON 6
J JDOM XMLOutputter getPrettyFormat() XML & JSON 3
H JDOM setAttribute Reihenfolge XML & JSON 3
B XML aus einer URL im Internet lesen (JDOM) XML & JSON 4
F Aus XML mit JDOM aus Elementattributen Werte rauslesen XML & JSON 4
R sax, stax, jdom, jaxb? List von Objekten speichern und laden XML & JSON 6
C xml validierung gegen xsd mit jdom: Fehlermeldung Cannot find the declaration of element ... XML & JSON 8
T Dom, Jdom, Sax XML & JSON 8
Helgon MalformedByteSequenceException und null JDOM Attribute XML & JSON 5
Helgon JDOM schreibt nicht XML & JSON 2
A XSl mit JDom auslesen XML & JSON 1
G xml, jdom "Entität wurde referenziert aber nicht deklariert." XML & JSON 4
A XSL und JDom XML & JSON 3
G jdom-Klassen in Eclipse importieren XML & JSON 2
S JDOM ohne XML Header erzeugen? XML & JSON 2
G JDOM - aus Children-Liste ein Child direkt ansprechen ohne XPath? XML & JSON 9
S JDOM nur Attribut Name XML & JSON 2
X JDom für SOAP Dateien geeignet? XML & JSON 3
T Xpath & JDOM Element Pfad ausgeben XML & JSON 2
M XML Parsen JDOM NullPointerEcxeption XML & JSON 7
S jdom hasChildren()? XML & JSON 1
T Frage zu getContent unter jdom XML & JSON 6
Z Tutorial für JDOM (XSD-Shema) XML & JSON 3
D jdom, xml, login-system XML & JSON 4
N JDOM: XML einlesen XML & JSON 4
O Parsen einer XML mit JDOM ohne Doctype Declaration XML & JSON 2
lordcarlos jdom zu iso-8859-15 zwingen XML & JSON 4
P jdom XML-Encoding auslesen XML & JSON 12
E JDOM - letzem child Attribut hinzufügen XML & JSON 4
H Schema-Validierung mit JDOM XML & JSON 2
lordcarlos JDOM und entfernen von children XML & JSON 4
E JDOM - Problem beim Zusammenfügen zweier Dateien XML & JSON 2
T jdom.jar als Relativer Pfad in Eclipse einbinden XML & JSON 4
sparrow JDom Element.getChild("Name") liefert null obwohl vorhanden XML & JSON 4
S XML, UTF-8, JDOM und Umlaute XML & JSON 3
E XML - JDOM - Bäume: was würdet ihr hier machen? XML & JSON 11
A JDOM: Wert schreiben bzw. ändern XML & JSON 6
T JDOM Bibiliothek XML & JSON 3
K JDOM vs. DOM, Schnittstellen XML & JSON 5
P Große XML Datei mittels JDOM bearbeiten / einlesen XML & JSON 6
0x7F800000 jdom mit xml.transform inkompatibel, was soll ich nehmen? XML & JSON 2
T EXSD auslesen mit XPath und JDOM XML & JSON 8
A JDOM und Sonderzeichen < > XML & JSON 17
G Simples XML File einlesen mit JDom. Prefix not bound ? XML & JSON 2
N jdom problem beim lesen von child elementen XML & JSON 5
N problem bei xml lesen mit jdom XML & JSON 2
S Ampersand im Jdom-Element XML & JSON 2
N jdom - xslt-Verweis in .xml einfügen XML & JSON 3
S Jdom+java webstart XML & JSON 4
K html -> cyberneko -> xml -> jdom . XML & JSON 3
I JDom Text ändern XML & JSON 4
C jdom.Element nicht vorhanden? XML & JSON 4
W JDOM element ändern funzt nich :( [problem gelöst] XML & JSON 3
C XPath in JDOM klappt nicht XML & JSON 2
S Harte Nuss mit XML und JDOM XML & JSON 2
H mit JDOM Verarbeitungsanweisungen und Kommentare auslesen XML & JSON 2

Ähnliche Java Themen

Neue Themen


Oben