Java aus 2 Arrays XML Datei erzeugen

Der nette Mann

Erfahrenes Mitglied
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
 
Hallo!

Schau mal hier:
Code:
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>
<spalte1>b</spalte1>
<spalte2>c</spalte2>
</Zeile>
- <Zeile id="1">
<spalte0>d</spalte0>
<spalte1>e</spalte1>
<spalte2>f</spalte2>
</Zeile>
</root>


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

Respekt und vielen Dank

Der nette Mann
 
Thomas Darimont hat gesagt.:
Hallo!

Schau mal hier:
Code:
			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);
				}
			}

Gruß Tom

Code:
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?
 
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:
Code:
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
 

Neue Beiträge

Zurück