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