next up previous contents
Nächste Seite: XML-Bäume transformieren Aufwärts: XML Vorherige Seite: Elemente und Kindelemente ausgeben   Inhalt

XML-Dateien bilden

Im letzten Abschnitt wollen wir XML-Daten in einem eigenen Baum einfügen und diesen XML-Baum in eine Textdatei schreiben. Diese Datei soll die Struktur einer wohlgeformten XML-Datei haben. Dazu verwenden wir die Programmstruktur aus dem vorangegangenen Beispiel und geben die gefundenen Attribut- und Elementwerte in eine Textdatei aus.

import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;

public class XML5 {

    public void parsen(String [] args) throws Exception {
        DocumentBuilderFactory fabrik = DocumentBuilderFactory.newInstance();
        DocumentBuilder aufbau = fabrik.newDocumentBuilder();
        Document eingabebaum = aufbau.parse(args[0]);

        FileWriter ausgabeStrom = new FileWriter(args[1]);
        BufferedWriter ausgabe = new BufferedWriter(ausgabeStrom);
        
        Document ausgabebaum = aufbau.newDocument();
        Element wurzel = ausgabebaum.createElement("Wahlpflichtfach");
        ausgabebaum.appendChild(wurzel);
        ausgabe.write("<?xml version='1.0'?>\n");
        ausgabe.write("<Wahlpflichtfach>\n");

        NodeList knotenListe = eingabebaum.getElementsByTagName("skriptum");
        int anzahl = knotenListe.getLength();
        for (int i=0; i<anzahl; i++) {
            Element element = (Element) knotenListe.item(i);
            String attributwert = element.getAttribute("titel");
            ausgabe.write("\t<kurs titel='" + attributwert + "'>\n");
            Element kindElement = (Element) knotenListe.item(i);
            NodeList kindKnoten = kindElement.getElementsByTagName("kapitel");
            int anzahl2 = kindKnoten.getLength();
            for (int j=0; j<anzahl2; j++) {
                String elementwert = kindKnoten.item(j).getFirstChild().getNodeValue();
                ausgabe.write("\t\t<kapitel>" + elementwert + "</kapitel>\n");
            }
            ausgabe.write("\t</kurs>\n");
        }
        ausgabe.write("</Wahlpflichtfach>");
        ausgabe.close();
    }

    public static void main (String [] args) throws Exception {
        XML5 proggi = new XML5();
        proggi.parsen(args);
    }
}

Unter der Voraussetzung, dass die Schreirechte für das aktuelle Verzeichnis bestehen, können wir die neue XML-Datei erzeugen:

alfred@duron:~/java/xml> java XML5 test.xml neu.xml

Wir öffnen die neue XML-Datei:

<?xml version='1.0'?>
<Wahlpflichtfach>
        <kurs titel='Java'>
                <kapitel>Einfuehrung</kapitel>
                <kapitel>XML</kapitel>
                <kapitel>DTD</kapitel>
                <kapitel>XSL</kapitel>
        </kurs>
        <kurs titel='PHP'>
                <kapitel>Einfuehrung</kapitel>
                <kapitel>Apache</kapitel>
                <kapitel>Server - Client</kapitel>
                <kapitel>Grundlagen</kapitel>
                <kapitel>Formulare</kapitel>
                <kapitel>PDF</kapitel>
                <kapitel>Grafiken</kapitel>
        </kurs>
</Wahlpflichtfach>

Diese Datei kann nicht auf Gültigkeit überprüft werden, weil keine DTD angegeben wurde. Allerdings kann sie mit Hilfe eines SAX-Parsers geparst werden:

alfred@duron:~/java/xml> java XML1 neu.xml
Die Datei neu.xml wurde erfolgreich geparst
14 Elemente gefunden

Damit ist überprüft worden, ob die Datei neu.xml wohlgeformt ist. Löschen wir mutwillig das Endetag </kurs> heraus, so erhalten wir die entsprechende Fehlermeldung des SAX-Parsers:

alfred@duron:~/java/xml> java XML1 neu.xml
[Fatal Error] neu.xml:17:3: Der Elementtyp "kurs" muss mit dem entsprechenden Endbefehl "</kurs>" 
beendet werden.
Exception in thread "main" org.xml.sax.SAXParseException: Der Elementtyp "kurs" muss mit dem 
entsprechenden Endbefehl "</kurs>" beendet werden.
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at XML1.parsen(XML1.java:17)
        at XML1.main(XML1.java:32)



Unterabschnitte
next up previous contents
Nächste Seite: XML-Bäume transformieren Aufwärts: XML Vorherige Seite: Elemente und Kindelemente ausgeben   Inhalt
Alfred Nussbaumer 2003-02-10