# Element an bestimmter Stelle einfügen (JDOM)



## brasilian (21. Nov 2006)

Hallo,

ich möchte ein Element mittels JDOM an einer bestimmten Stelle einfügen. Die Board-Suche hierzu hat mir u.a. die Methode addContent (int Index, Element neu) ausgespuckt. Diese Methode kann ich jedoch nicht nutzen, da ich die JDOM-Version b9 verwenden muss. Ich kann also nur mittels addContent (Element neu) neue Elemente an das Ende des Dokumentes einfügen. 

Ich glaube (und hoffe), dass es aber trotzdem auch mit meiner älteren Version (umsteigen nicht möglich) von JDOM möglich ist. Meine Idee hierzu sieht wie folgt aus.

Ich hole mir die Struktur des XML-Documents in eine Liste vom Typ List. Ich durchsuche dann diese Liste bis ich die gewünschte Position gefunden habe. Das neue Element soll vor dem ersten Element eingefügt werden, welches keinen Unterelemente hat. Sobald ich die Position gefunden habe, füge ich der Liste ein neues Element an der entsprechenden Position hinzu. Zum Schluß übernehme ich dann die Liste als XML-Struktur.
Hier ist mein Code, der genau dies machen SOLL:


```
List liste = document.getRootElement().getChildren();
//Suchen der einzufügenden Position
for (int pos = 0 ; pos < liste.size() ; pos++)
{
    try 
    {
        if (((Element)(liste.get(pos))).getChildren() != null)
        {
            liste.add(pos + 1, neuesElement);
            document.getRootElement().setContent(liste);
            break;
        }
    }

    //In der Liste befinden sich nicht nur Elemente sondern auch Strings
    catch (ClassCastException e)
    {

    }
}
```

Das Resultat des Codes ist jedoch ein leeres XML-Dokument. Wer kann mir dies erklären ?

Viele Grüße
Brasi


----------



## Wildcard (21. Nov 2006)

Wo schreibst du das Document den raus?  ???:L 


```
//In der Liste befinden sich nicht nur Elemente sondern auch Strings
    catch (ClassCastException e)
    {

    }
```
Dann mach eine Typ-Prüfung anstatt auf eine Exception zu warten  :noe:


----------



## brasilian (21. Nov 2006)

Hallo Wildcard,

das Document wird mit XMLOuttputer nach der for-Schleife geschrieben. Dies ist leider in meinem Code-Ausschnitt nicht deutlich geworden. Wenn ich die normale Methode addContent (Element neu) verwendet hatte, wurde es aber am Ende schon vollständig aber nicht in meiner gewünschten Reihenfolge rausgeschrieben.



> Dann mach eine Typ-Prüfung anstatt auf eine Exception zu warten



Jetzt steh ich etwas auf dem Schlauch. Wie soll dies den gehen ?


Gruß
Brasi


----------



## Wildcard (21. Nov 2006)

brasilian hat gesagt.:
			
		

> Jetzt steh ich etwas auf dem Schlauch. Wie soll dies den gehen ?


instanceof 

Ist dir eigentlich klar das deine neue Liste an Position 0 kein Objekt enthält und das sie beim ersten Element das Kinder hat komplett beendet wird?

Davon abgesehen macht der Code doch nichts anderes als jedes Element der Liste um einen Platz zu verschieben.
Wozu das ganze?  ???:L


----------



## Wildcard (21. Nov 2006)

--doppelpost--  :?


----------



## brasilian (21. Nov 2006)

Hallo Wildcard,

das meine Liste an Position 0 kein Element enthält ist mir so nicht klar. Das erste Element einer Liste beginnt doch generell an Position 0, und so erwarte ich doch, dass an dieser Position entweder ein Typ String oder ein Typ Element steht.

Sobald ich auf das erste Element mit Kindern treffe wird meine Liste nicht komplett beendet. Die for-Schleife wird beendet, doch vorher schiebe ich ja noch das neu einzufügende Element vor dem Element mit den Kindern. Die Liste ist somit erweitert worden, nämlich genau um ein Element. Alle anderen Elemente müssen dann zwangsläufig um eine Position nach hinten verschoben werden.

Die for-Schleife wird während des Programmablaufs n-mal aufgerufen, wodurch n-neue Elemente in der Liste und in meiner XML-Datei eingebunden werden. 

Vielen Dank für deine bisherige Hilfestellung :toll: 
Christian


----------



## Wildcard (21. Nov 2006)

Ah, ok. Ich seh gerade, das ist ja keine neue Liste, sondern die alte... mein Fehler.



> Das neue Element soll vor dem ersten Element eingefügt werden, welches keinen Unterelemente hat.




```
liste.add(pos + 1, neuesElement);
```
Du fügst es doch aber genau danach ein  ???:L


----------



## brasilian (22. Nov 2006)

Hallo,

das mit dem Einfügen war mein Fehler. Ich habe es korrigiert, doch am Ergebnis ändert dies leider nichts. 
Ich erhalte nur nur die Codierungszeile (ISO...) und eine </Root> in der zweiten Zeile.


----------



## Wildcard (22. Nov 2006)

Nimm dir den Debugger zur hand und schau dir den Inhalt der Liste nach der Schleife an.
Wenn da alles ok ist setz dir einen breakpoint in die Methode in der du raus-schreibst, dann findest du das Problem sicherlich schnell.


----------

