# XML Datei mit DOM erzeugen



## der anfänger (1. Feb 2007)

hi @all

ich habe da ein problem bei dem ich nicht weiter komme. und zwar möchte ich mir eine xml-datei erstellen mit hilfe von java. ich habe auch schon ein bißchen gelesen und möchte es gerne mit dom realisieren. außer es sagt mir jemand was besseres. 

erstmal so wie die datei aussehen sollte:

<?xml version = '1.0' encoding = 'iso-8859-1' ?>
<XML>
	<Person>
		<Name>Mustermann</Name>
		<Vorname>Karl</Vorname>
	</Person>
</XML>


also wenn ich die so im editor eingebe dann nimmt sie mein browser auch an. und genauso sollte sie dann mit java auch aussehen.

jetzt mein quellcode:


```
public void createXMLDocument() {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.newDocument();
		
			Element root = document.createElement("XML");
			document.appendChild(root);

			Element person = document.createElement("Person");
			root.appendChild(person);
		
			Element name = document.createElement("Name");
			person.appendChild(name);
			name.appendChild(document.createTextNode("Mustermann"));
		
			Element vorname = document.createElement("Vorname");
			person.appendChild(vorname);
			vorname.appendChild(document.createTextNode("Karl"));
		
			FileWriter ausgabestrom = new FileWriter("test.xml");
			BufferedWriter output = new BufferedWriter(ausgabestrom);
			String inhalt = "<?xml version = '1.0' encoding = 'iso-8859-1' ?>\n";
			inhalt = inhalt + document.getDocumentElement().toString();
			output.write(inhalt,0,inhalt.length());
			output.flush();
			output.close();
		} catch(ParserConfigurationException e) {
			e.printStackTrace();
		} catch(Throwable e) {
			e.printStackTrace();
		} 
	}
```

wenn ich diesen ausführe dann bekomme ich folgende datei:

<?xml version = '1.0' encoding = 'iso-8859-1' ?>
[XML: null]


ich weiß nicht woran es liegt und ich denke einfach mal das ich zu blöd bin und hoffe auf eure hilfe. 

bedanke mich schon mal im voraus!
	
	
	
	





```

```


----------



## SlaterB (1. Feb 2007)

na so einfach gehts nun nicht..

aber das ist doch eine grundlegende Sache, die musst du doch in jedem Tutorial finden..,
wichtig ist vielleicht welches DOM du benutzt,
ich habe immer das Gefühl, dass es da viele Versionen gibt..

für org.w3c.dom.*;
dürfte folgendes passend sein:
http://www.virtualuniversity.ch/software/java-xml/3-6.html
(ungetestet)

ansonsten findet man bei google viel..


----------



## der anfänger (1. Feb 2007)

das lustige daran ist ja, das ich das beispiel aus nem buch habe. aber es funzt so nicht! welches dom das ist? weiß ich nicht so genau. im buch steht das die jaxp-api benutzt wird und das es im java 2sdk mit drin ist. aber ich schau mir das tutorial mal an von dir. mal schaun. ich danke dir schon mal.


----------



## trazzag (2. Feb 2007)

der anfänger hat gesagt.:
			
		

> im buch steht das die jaxp-api benutzt wird und das es im java 2sdk mit drin ist.



JAXP ist auch kein DOM, ist ne Alternative, die auch (wie du schreibst) schon "drin" ist. Guck dir zu den verschiedenen Möglichkeiten doch mal diesen Link hier an:

http://www.torsten-horn.de/techdocs/java-xml.htm


----------



## max60watt (5. Feb 2007)

Hallo der anfänger,

bei mir ist das selbe Problem aufgetreten.
Unter Java 1.4 habe ich, ähnlich deinem Quellcode, einen DOM-Baum aufgebaut und auf Platte geschrieben. Hat wunderbar geklappt.
Nach Umstellung auf Java 1.6 bekam ich auch die Datei wie du.

So wie ich es einschätze, ist im JAXP nicht mehr DOM2, sonder DOM3 implemetiert. Die Zeile

```
inhalt = inhalt + document.getDocumentElement().toString();
```
in deinem Quelltext scheint nicht mehr zu funktionieren. Hier muss ein Transformer zur Ausgabe benutzt werden.

Einen Beispielquelltext findest du unter
turku.wi-bw.tfh-wildau.de/~cmueller/Announce/Java/Beispiele/xml/
in der Datei Dom3,java.

Hat bei mir jedenfalls funktioniert.

Gruss Max


----------



## Gooose (20. Feb 2007)

Versuch's mal damit:

erstelle die einzelnen Elemente und weise sie ihrem parent zu.
Fange bei dem tiefsten Knoten / Element an und arbeite dich zum Root hoch.

Zum erstellen von XML-Quellcode finde ich DOM  :bloed: besser geeignet hierfür ist  :toll:  dom4j oder jdom.


```
public void createXMLDocument() { 
    public void createXMLDocument() { 
        try { 
           DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
           DocumentBuilder builder = factory.newDocumentBuilder(); 
           Document document = builder.newDocument(); 
         
           Element root = document.createElement("XML"); 

           Element person = document.createElement("Person"); 
           Element name = document.createElement("Name"); 
           Element vorname = document.createElement("Vorname"); 

           name.appendChild(document.createTextNode("Mustermann")); 
           person.appendChild(name); 
         
           vorname.appendChild(document.createTextNode("Karl")); 
           person.appendChild(vorname); 

           root.appendChild(person); 
           document.appendChild(root); 
         
           DOMReader reader = new DOMReader();
           org.dom4j.Document doc2 = reader.read(document);
           System.out.println(doc2.asXML());
           
           FileWriter ausgabestrom = new FileWriter("test.xml"); 
           BufferedWriter output = new BufferedWriter(ausgabestrom); 
           output.write(doc2.asXML().toString()); 
           output.flush(); 
           output.close(); 

        } catch(ParserConfigurationException e) { 
           e.printStackTrace(); 
        } catch(Throwable e) { 
           e.printStackTrace(); 
        } 
     }
```

Viiiel Spass damit.

Gruuuss
Gooose


----------



## Gooose (20. Feb 2007)

SORRY - Codezeile 2 streichen


----------

