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