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:
Und Konstanten.java enthält
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
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:
Java:
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
Java:
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