Maike: JAVA - XML + JDom

Hallo,

ich versuche aus einem großen XML-Dokument (siehe unten) mit Java + JDom mehrere kleine XML-Dokumente zu erzeugen (für jede Produktgruppe eine). Ich habe schon mehrere Möglichkeiten ausprobiert, jedoch erhalte ich immer die Exception:

org.jdom.IllegalAddException: The Content already has an existing parent "Adonia"

Woran liegt das? Warum hat das Dokument, das ich erstelle 2 Elemente, die Adonia heißen??
Kann mir jemand sagen, was ich falsch mache?

Hier ein Teil des Java-Codes:

SAXBuilder builder = new SAXBuilder();
Document doc = builder.build("test.xml");

Element root = doc.getRootElement();
Element elem = root.getChild("Produktgruppen");
List produktgruppen = elem.getChildren();

//for Schleife über "produktgruppen"
Element e = (Element) produktgruppen.get(i);
Element element = new Element(e.getValue());

Document newDoc = new Document(element);
newDoc.addContent(root.getChild(e.getValue()).getChildren());
//end for Schleife

Hier ein Teil der XML-Datei:

<Document>
     <Produktgruppen>
         <Serie>Adonia</Serie>
         <Serie>Arondo</Serie>
         <Serie>Assisi</Serie>
     </Produktgruppen>
     <Adonia>
        <Artikel>
           <ArtNr>1150</ArtNr>
           <FarbNr>JK75</FarbNr>
        </Artikel>
        <Artikel>
           <ArtNr>1150</ArtNr>
           <FarbNr>JK88</FarbNr>
        </Artikel>
        <Artikel>
           <ArtNr>1396</ArtNr>
           <FarbNr>JK73</FarbNr>
        </Artikel>
     </Adonia>
     <Arondo>
         ...
     </Arondo>
     <Assisi>
         ...
     </Assisi>
  </Document>

  1. Hallo,

    vorneweg: Ich habe nie etwas mit JDOM gemacht. Was ich hier schreibe,
    ist also (fast) reine Spekulation. :-)

    org.jdom.IllegalAddException: The Content already has an existing parent "Adonia"

    Mit "content" ist hier wohl eines der Element gemeint, die du
    versuchst zu newDoc hinzuzufügen.
    Offensichtlich haben diese Element bereits einen Parent, was ja auch
    korrekt ist. Der Parent ist wohl "<Adonia>" in der alten XML.
    Du willst dieses selbe Element jetzt aber dem neuen Dokument (newDoc)
    zuweisen. Das mag das Element aber nicht, weil es schon einen Vater
    hat. Daher die Exception.

    Wenn ich das richtig sehe, gibt's da eine Methode "detach()", die
    das Element von seinem Parent-Element löst. Probier das mal aus.

    Gruß
    Slyh

    PS: Würd mich interessieren, falls es geklappt hat oder ob ich völlig
    daneben lag.

    1. Hallo Slyh,

      vielen vielen Dank für diesen Hinweis,
      mit der Methode detach() geht das jetzt!!! Muss man erst mal drauf kommen ;-)

      Danke nochmal, hat mir sehr geholfen!!!

      Gruß Maike