next up previous contents
Nächste Seite: Attributwerte auslesen Aufwärts: XML-Daten verwenden, DOM Vorherige Seite: XML-Daten verwenden, DOM   Inhalt

XML-Daten ausgeben

Im ersten Beispiel lesen wir einige Daten aus folgendem XML-Dokument aus:

<?xml version="1.0"?>
<!DOCTYPE wpf SYSTEM "test.dtd">
<wpf>
<skriptum titel="Java">
  <autor>
    <vorname>Alfred</vorname>
    <famname>Nussbaumer</famname>
  </autor>
  <kategorie>Beispielsammlung</kategorie>
  <hersteller>LaTeX</hersteller>
  <version>
    <nummer>1.0</nummer>
    <datum>2003-02-10</datum>
  </version>
  <seitenzahl>170</seitenzahl>
  <kapitel>Einfuehrung</kapitel>
  <kapitel>XML</kapitel>
  <kapitel>DTD</kapitel>
  <kapitel>XSL</kapitel>
</skriptum>
<skriptum titel="PHP">
  <autor>
    <vorname>Alfred</vorname>
    <famname>Nussbaumer</famname>
  </autor>
  <kategorie>Leitfaden</kategorie>
  <hersteller>LaTeX</hersteller>
  <version>
    <nummer>2.0</nummer>
    <datum>2002-08-20</datum>
  </version>
  <seitenzahl>119</seitenzahl>
  <kapitel>Einfuehrung</kapitel>
  <kapitel>Apache</kapitel>
  <kapitel>Server - Client</kapitel>
  <kapitel>Grundlagen</kapitel>
  <kapitel>Formulare</kapitel>
  <kapitel>PDF</kapitel>
  <kapitel>Grafiken</kapitel>
</skriptum>
</wpf>

Natürlich wurde die DTD entsprechend erweitert:

<!ELEMENT wpf (skriptum+)>
  <!ELEMENT skriptum (autor+, kategorie, hersteller, version, seitenzahl, kapitel+)>
    <!ELEMENT autor (vorname, famname)>
      <!ELEMENT vorname (#PCDATA)>
      <!ELEMENT famname (#PCDATA)>
    <!ELEMENT kategorie (#PCDATA)>
    <!ELEMENT hersteller (#PCDATA)>
    <!ELEMENT version (nummer,datum)>
      <!ELEMENT nummer (#PCDATA)>
      <!ELEMENT datum (#PCDATA)>
    <!ELEMENT seitenzahl (#PCDATA)>
    <!ELEMENT kapitel (#PCDATA)>
  <!ATTLIST skriptum titel CDATA "">

Das + - Zeichen hinter dem Elementnamen bedeutet, dass dieses Element in der XML-Datei auch mehrmals auftreten darf. Dies ist in der obigen XML-Datei für die Elemente skriptum und kapitel der Fall. Das Java-Programmbeispiel erzeugt einen neuen Parser und gibt alle Inhalte der benannten Elemente aus:

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

public class XML2 {

    public void parsen(String [] args) throws Exception {
        DocumentBuilderFactory fabrik = DocumentBuilderFactory.newInstance();
        DocumentBuilder aufbau = fabrik.newDocumentBuilder();
        Document xmlbaum = aufbau.parse(args[0]);
        NodeList knotenListe = xmlbaum.getElementsByTagName("kapitel");
        int anzahl = knotenListe.getLength();
        System.out.println(anzahl + " passende Knoten gefunden");
        for (int i = 0; i<anzahl; i++) {
            System.out.println(knotenListe.item(i).getFirstChild().getNodeValue());
        }
    }

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

Entscheidend ist der Aufruf der Methode getNodeValue(): Sie wird auf den Knoten angewendet, den die Methode getFirstChild() liefert, die sich auf den i-ten Eintrag im Ergebnisbaum zum angegebenen Elementnamen bezieht. Im vorliegenden Fall erhalten wir folgende Ausgabe:

alfred@duron:~/java/xml> java XML2 test.xml
11 passende Knoten gefunden
Einfuehrung
XML
DTD
XSL
Einfuehrung
Apache
Server - Client
Grundlagen
Formulare
PDF
Grafiken



Alfred Nussbaumer 2003-02-10