# JDOM Element ohne Inhalt kopieren ?



## MarcelloBonventre (12. Feb 2007)

Hallo!
Also ich möchte aus einem JDOM ein Element X herauskopieren. Das soll dann in einem neuen JDOM als root-Element gespeichert werden. Soweit super. Klappt auch, nur ist das JDOM recht groß und es werden immer alle Unterelemente von Element X mitkopiert. Ich will aber nur die Start- und Endtags und die Attribute von Element X, ohne den Inhalt kopieren. Z.B.:

*
Ausgangs-JDOM*

<Y>
*<X abc="123" def="456">*
  <A xyz="234">
  InhaltVonA
  </A>
*
   <C www="http"/>
**
</X>* 
</Y>


*Ziel-JDOM

<X abc="123" def="456">
</X>
*

wie mache ich das?

Gruß Marcello


----------



## clemson (12. Feb 2007)

Hallo!

So sollt' das funztkionieren...


```
import java.io.File;
import java.io.IOException;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

public class JdomTest
{

	public static void main(String[] args) throws JDOMException, IOException
	{
		// get the document
		SAXBuilder builder = new SAXBuilder();
		File f = new File("xml.xml");
		Document doc = builder.build(f);

		XMLOutputter outputter = new XMLOutputter();
		outputter.output(doc, System.out);

		// get the root element
		Element rootElement = doc.getRootElement();

		// get the X element
		Element xElement = rootElement.getChild("X");

		// detach the X element from the origin document and remove all
		// childrens
		xElement.detach();
		xElement.removeContent();

		// create a new document with the x element
		Document doc2 = new Document(xElement);

		// output the new xml
		outputter.output(doc2, System.out);
	}

}
```


----------



## MarcelloBonventre (13. Feb 2007)

Die *.removeContent()* Methode hatte ich nicht gefunden. Die hat's gebracht!!


```
xElement.detach(); //brauchte ich in diesem Fall nicht
Element kopieVonX = (Element)(xElement.clone()); //habe ich stattdessen genommen.
//Hierbei muss nocheinmal der Rückgabewert von .clone() in Element gecastet werden.
kopieVonX.removeContent(); //hiermit hab ich dann eine Kopie von xElement ohne Inhalt
```
*DANKE!*


----------



## clemson (13. Feb 2007)

Wenn du allerdings aus dem kopieVonX ein neues Document basteln willst, dann musst du die #detach() aufrufen, weil sonst gibts eine "org.jdom.IllegalAddException: The Content already has an existing parent" .

Ich weiß nicht was du genau machen willst, aber die xElement.clone() kopierst du das ganze X Element, was bei größerem <X> länger dauert als das xElement#detach(). Die Element#detach() löst sozusagen das Element vom Dokument ab und es ist dann ein eigenständiges Element...

Wie gesagt, ist dann abhängig vom Einsatzfall.


----------

