# JAVA und DOM



## gast (29. Jan 2007)

Hi,

und zwar habe ich folgendes Problem. Ich habe hier eine XML Datei die ich mit DOM einlesen will und dann rückwärts ausgeben lassen will bzw eine neue XML Datei erstellen. Mit Rückwärts meine ich das, dass letze Element in der XML Datei nach dem verändern meine erstes in der neuen Ausgabe oder Datei sein soll. Ich habe mich schon schlau gemacht und auch mich durch die API durchgelesen. Soweit glaube ich auch allles verstanden zu haben. Doch irgendwie fehlt mir ein wirkliches Bsp. wo ich aus einer vorhanden XML Datei eine neue erzeugen kann. Das Parsen der Datei habe ich schon hinbekommen.Nur ich weiss halt nicht wie ich da einen Anfang hinbekomme. Wie kann ich zb aus der vorhandenen XML Datei einen Knoten kopieren und dann in eines von mir neuen erstellten Dokument als neues Element mit den kompletten Inhalt  einfügen. Wäre euch sehr dankbar über sämtliche Hilfe. Vlt ein paar Codefragmente als Bsp wären auch nicht schlecht.


mfg


----------



## Gooose (22. Feb 2007)

```
public void umkehr() {
        try { 
            URL url = new URL("file:///C://Test.xml");
            InputStream isXML = new FileInputStream(new File(url.getPath()));

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
            factory.setValidating(false);
            factory.setNamespaceAware(true);
            DocumentBuilder builder = factory.newDocumentBuilder(); 
            Document document = builder.parse(isXML);

            Document nDocument = builder.newDocument();
            Element nRootElement = nDocument.createElement(document.getDocumentElement().getNodeName());

            NodeList nlElemente = document.getDocumentElement().getChildNodes();
            for (int i = nlElemente.getLength() - 1; i > -1; i--){
                // kopieren von Knoten mit Unterknoten = true, nur das Element = false
                Node nElement = nDocument.importNode(nlElemente.item(i), true);
                nRootElement.appendChild(nElement);
            }

            nDocument.appendChild(nRootElement);

            System.out.println(new DOMReader().read(nDocument).asXML());

        } catch(Exception e) { 
            e.printStackTrace(); 
        } 
        
    }
```


----------



## Marcel Gascoyne (22. Feb 2007)

Oder mit JDOM:


```
import java.io.File;
import java.io.PrintWriter;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class XmlTest {
	
	public static void main( String[] args ) throws Exception {
		XmlTest instance = new XmlTest();
		instance.parse();
	}
	
	public void parse() throws Exception {
		SAXBuilder sb = new SAXBuilder();
		Document docInput = sb.build( new File( "input.xml" ) );
		Element rootInput = docInput.getRootElement();

		Document docOutput = new Document();
		Element rootOutput = new Element( "DokumentNeu" );
		docOutput.setRootElement( rootOutput );
		
		for ( int idx = rootInput.getChildren().size() - 1; idx >= 0; idx-- ) {
			Element element = (Element) rootInput.getChildren().get( idx );
			rootOutput.addContent( (Element) element.clone() );
		}
		
		PrintWriter pw = new PrintWriter( new File( "output.xml" ) );
		XMLOutputter xout = new XMLOutputter( Format.getPrettyFormat() );
		xout.output( docOutput, pw );
	}
	
}
```
[/code]


----------

