# Neue Inhalte in XML-Datei einfügen



## Sherry (5. Apr 2014)

Hallo,

ich versuche mich gerade im Erstellen eines Programmcodes, der eine bestehende XML-Datei mit weiteren Elementen und Inhalten erweitert.

Als Beispiel habe ich hier einen Terminkalender in XML:
[XML]<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<terminkalender xmlns="http://www.errata.com/java/terminkalender" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <besitzer>
    <name>Sherry</name>
  </besitzer>
  <termine name="Wichtige Termine">
    <termin>
      <was>Mit Sarah Weintrinken gehen</was>
      <wann>Donnerstagabend</wann>
      <wo>Restaurant</wo>
    </termin>
  </termine>
</terminkalender>
[/XML]

Der Java-Code, der diese Datei erzeugt sähe wie folgt aus:

```
package com.errata.java.terminkalender;


import static com.errata.java.terminkalender.Konstanten.ATTRIBUT_TERMINE_NAME;
import static com.errata.java.terminkalender.Konstanten.ELEMENT_BESITZER;
import static com.errata.java.terminkalender.Konstanten.ELEMENT_BESITZER_NAME;
import static com.errata.java.terminkalender.Konstanten.ELEMENT_TERMIN;
import static com.errata.java.terminkalender.Konstanten.ELEMENT_TERMINE;
import static com.errata.java.terminkalender.Konstanten.ELEMENT_TERMINKALENDER;
import static com.errata.java.terminkalender.Konstanten.ELEMENT_WANN;
import static com.errata.java.terminkalender.Konstanten.ELEMENT_WAS;
import static com.errata.java.terminkalender.Konstanten.ELEMENT_WO;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

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

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

public class DOM {
	public static void main(String[] args) {
		try (OutputStream ausgabe = new FileOutputStream(new File(
				"resources/terminkalender.xml"))) {
			DocumentBuilderFactory fabrik = DocumentBuilderFactory.newInstance();
			fabrik.setNamespaceAware(true);
			DocumentBuilder documentBauer = fabrik.newDocumentBuilder();
			Document dokument = documentBauer.newDocument();
			Element terminkalender = dokument.createElement(ELEMENT_TERMINKALENDER);
			terminkalender.setAttribute("xmlns","http://www.errata.com/java/terminkalender");
			terminkalender.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");
			dokument.appendChild(terminkalender);
			
			Element besitzer = dokument.createElement(ELEMENT_BESITZER);
			Element name = dokument.createElement(ELEMENT_BESITZER_NAME);
			name.setTextContent("Sherry");
			Element termine = dokument.createElement(ELEMENT_TERMINE);
			termine.setAttribute(ATTRIBUT_TERMINE_NAME, "Wichtige Termine");
			Element termin = dokument.createElement(ELEMENT_TERMIN);
			Element was = dokument.createElement(ELEMENT_WAS);
			was.setTextContent("Mit Sarah Weintrinken gehen");
			Element wann = dokument.createElement(ELEMENT_WANN);
			wann.setTextContent("Donnerstagabend");
			Element wo = dokument.createElement(ELEMENT_WO);
			wo.setTextContent("Restaurant");
			
			besitzer.appendChild(name);
			terminkalender.appendChild(besitzer);
			termin.appendChild(was);
			termin.appendChild(wann);
			termin.appendChild(wo);
			termine.appendChild(termin);
			terminkalender.appendChild(termine);
			
			TransformerFactory transformerFabrik = TransformerFactory.newInstance();
			Transformer transformer = transformerFabrik.newTransformer();
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
			DOMSource quelle = new DOMSource(dokument);
			StreamResult ziel = new StreamResult(ausgabe);
			transformer.transform(quelle, ziel);
		} catch (ParserConfigurationException | IOException | TransformerException e) {
			e.printStackTrace();
		}
	}
}
```

Und Konstanten.java enthält

```
package com.errata.java.terminkalender
public class Konstanten {
	public final static String ELEMENT_TERMINKALENDER = "terminkalender";
	public final static String ELEMENT_BESITZER = "besitzer";
	public final static String ELEMENT_BESITZER_NAME = "name";
	public final static String ELEMENT_TERMINE = "termine";
	public final static String ELEMENT_TERMINE_NAME = "name";
	public final static String ELEMENT_TERMIN = "termin";
	public final static String ELEMENT_WAS = "was";
	public final static String ELEMENT_WANN = "wann";
	public final static String ELEMENT_WO = "wo";
	public final static String ATTRIBUT_TERMINE_NAME = "name";
	private Konstanten() {
	}
}
```

Dieser Java-Code erzeugt mir zwar die XML-Datei und wäre als Anfang nützlich. Wie kann ich DOM nutzen, wenn ich in die bereits existierende XML-Datei neue Termine einfügen will? Also ein neues 
[XML]<termin>
      <was></was>
      <wann></wann>
      <wo></wo>
    </termin>[/XML]
inklusive der Inhalte anlegen und in die XML-Datei einfügen will?

Vielen Dank 

Sherry


----------

