# Java aus 2 Arrays XML Datei erzeugen



## Der nette Mann (10. November 2004)

Hallo, ich möchte aus 2 Arrays (eines mit den Spaltennamen, eines mit den Werten) eine XML Datei schreiben die wie folgt aussehen soll

<zeile id="1">
    <spalte1>wert1</spalte>
    ...
    <spalte n>wert n</spalte>
</zeile>
<zeile id"2>
    <spalte1>wert1</spalte>
    ...
    <spalte n>wert n</spalte>
</zeile>

Jetzt hab ich mich schon mit dom4j probiert. Bekomme aber Fehlermeldungen, weil er es nicht schafft Elemente zu einem Baum hinzuzufügen, welche später wieder überschrieben werden. Hab keine Ahnung wie das funktionieren soll. Nehme auch ne andere API (z. B. JDom)

Danke 

Der nette Mann


----------



## torsch2711 (10. November 2004)

Ich kenn mich zwar nicht so 100% mit der XML umsetzung in Java aus, aber du musst ja erstmal einen Root-Knoten erstellen, unter welchem du dann elemente hinzufügen kannst. Schau dir mal das XML Tutorial von der java seite an.

http://java.sun.com/xml/tutorial_intro.html


Viel Erfolg.


Grüsse

Torsten


----------



## Thomas Darimont (10. November 2004)

Hallo!

Schau mal hier:

```
package de.tutorials;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class XMLTest {

	public static void main(String[] args) {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document doc = builder.newDocument();
			DOMSource source = new DOMSource(doc);

			String[][] array = new String[][] { { "a", "b", "c" },
					{ "d", "e", "f" } };

			Element element = doc.createElement("root");
			doc.appendChild(element);

			for (int i = 0; i < array.length; i++) {
				Element elem = doc.createElement("Zeile");
				element.appendChild(elem);
				elem.setAttribute("id", "" + i);
				for (int j = 0; j < array[i].length; j++) {
					Element e = doc.createElement("spalte" + j);
					e.setTextContent(array[i][j]);
					elem.appendChild(e);
				}
			}

			StreamResult result = new StreamResult(new File("c:/data.xml"));

			Transformer transformer = TransformerFactory.newInstance()
					.newTransformer();

			transformer.transform(source, result);

		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerFactoryConfigurationError e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		}
	}
}
```

Ausgabe:


> <?xml version="1.0" encoding="UTF-8" ?>
> - <root>
> - <Zeile id="0">
> <spalte0>a</spalte0>
> ...




Gruß Tom


----------



## Der nette Mann (10. November 2004)

Vielen Dank für dieses tolle Codebeispiel. Ich probier's morgen mal aus und poste meine Erfahrungen.

Respekt und vielen Dank

Der nette Mann


----------



## Snape (11. November 2004)

Thomas Darimont hat gesagt.:
			
		

> Hallo!
> 
> Schau mal hier:
> 
> ...




```
e.setTextContent(array[i][j]);
```
"The method setTextContent(String) is undefined for the type Element"

Könnte es sein dass das zu Java 1.5 gehört?


----------



## Thomas Darimont (11. November 2004)

Hallo!

Hoppsala ... ja das kann sein ...setTextContent(...) gibts laut API Doc erst seit DomLevel 3 und anscheinend wird das erst in 1.5 verwendet...

Dann eben so:

```
package de.tutorials;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

public class XMLTest {

	public static void main(String[] args) {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document doc = builder.newDocument();
			DOMSource source = new DOMSource(doc);

			String[][] array = new String[][] { { "a", "b", "c" },
					{ "d", "e", "f" } };

			Element element = doc.createElement("root");
			doc.appendChild(element);

			for (int i = 0; i < array.length; i++) {
				Element elem = doc.createElement("Zeile");
				element.appendChild(elem);
				elem.setAttribute("id", "" + i);
				for (int j = 0; j < array[i].length; j++) {
					Element e = doc.createElement("spalte" + j);
					//e.setTextContent(array[i][j]); in JDK 5.0
					Text text = doc.createTextNode(array[i][j]);
					e.appendChild(text);
					elem.appendChild(e);
				}
			}

			StreamResult result = new StreamResult(new File("c:/data.xml"));

			Transformer transformer = TransformerFactory.newInstance()
					.newTransformer();

			transformer.transform(source, result);

		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerFactoryConfigurationError e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		}
	}
}
```

Gruß Tom


----------

