BEISPIEL
Suchstring Beschreibung/Ausgabe
WELT/EUROPA/*[Fläche or
Einwohner]
Sucht alle Knoten unterhalb von »WELT/EUROPA«, die einen Unterknoten mit dem Namen
»Fläche« oder »Einwohner« haben:
Frankreich (Text: 54396557800000)
Deutschland (Text: 35685480767600)
WELT/EUROPA/*[Fläche
> 400000]
Sucht alle Knoten unterhalb von »WELT/EUROPA«, die eine Fläche > 400000 haben:
Frankreich (Text: 54396557800000)
Sie können und sollten den Eintrag »Fläche« vor der Vergleichsoperation mit der Funktion number in
einen numerischen Wert umwandeln.
WELT/EUROPA/*[number(Fläche) > 400000]
/WELT/*[last()] Sucht den letzten Knoten unterhalb von »WELT«:
SÜDAMERIKA
WELT/*[3] Der vierte Untereintrag unter »WELT«:
ASIEN
Tabelle 12.9 Verschiedene XPath-Ausdrücke (Fortsetzung)
Diese Übersicht dürfte Ihnen einen ersten Einblick in die Möglichkeiten der Suche gewährt haben, mehr
Informationen finden Sie in der Online-Hilfe zum DOM unter dem Stichwort »XSL Pattern Syntax«.
Das Interpretieren von Leerzeichen
Wie in jeder Textdatei und um nichts anderes handelt es sich bei einer XML-Datei kommen im Text
auch Leerzeichen, Zeilenumbrüche und Tabulatorzeichen vor. Gerade bei XML-Daten werden die genann-
ten Zeichen gern dazu verwendet, um eine gewisse Gliederung innerhalb der Daten zum Ausdruck zu brin-
gen und eine einfachere Lesbarkeit zu gewährleisten.
Für den Programmierer bzw. das analysierende Programm ist es in vielen Fällen schon ein Unterschied, ob
Leerzeichen signifikant sind.
Zwei Varianten für die Interpretation bieten sich an:
Steuerung mit Hilfe der DOM-Eigenschaft PreserveWhiteSpace
Definition eines Attributes xml:space beim Erstellen der XML-Daten
Ausgehend von folgenden XML-Daten soll die Auswirkung der
PreserveWhiteSpace
-Eigenschaft dargestellt
werden.
<?xml version="1.0"?>
<DATEN>
Wort1 Wort2 Wort3
Wort4 Wort5
</DATEN>
Das zugehörige kleine Beispielprogramm liest die XML-Daten aus einem String ein und gibt die Ergebnisse
im Direktfenster aus:
789
XML-Verarbeitung mit dem DOM
BEISPIEL
Kapitel 12: XML in Theorie und Praxis
Sub XML_Versuch_Space1()
Dim xmlDoc As New DOMDocument30
Dim s As String
xmlDoc.preserveWhiteSpace = False
Erzeugen der XML-Daten:
s = "<?xml version=""1.0""?>" & Chr(13) & Chr(10)
s = s & "<DATEN>" & Chr(13) & Chr(10) & Chr(13) & Chr(10)
s = s & " Wort1 Wort2 Wort3 " & Chr(13) & Chr(10)
s = s & Chr(9) & "Wort4 Wort5" & Chr(10) & Chr(13)
s = s & "</DATEN>"
Laden der XML-Daten:
xmlDoc.loadXML s
Ausgabe der Textdaten des Root-Elementes mit und ohne
PreserveWhiteSpace
:
MsgBox xmlDoc.documentElement.Text, , "preserveWhiteSpace = False"
xmlDoc.preserveWhiteSpace = True
MsgBox xmlDoc.documentElement.Text, , "preserveWhiteSpace = True"
End Sub
Mit PreserveWhiteSpace = False erhalten Sie einen String, der am Anfang und am Ende »beschnitten« ist, die
folgende Abbildung zeigt das genaue Resultat:
Abbildung 12.37 XML-Daten (PreserveWhiteSpace =
False)
PreserveWhiteSpace = True liefert uns die Originaldaten inklusive aller Zeilenumbrüche:
Abbildung 12.38 XML-Daten (PreserveWhiteSpace = True)
Möchten Sie schon beim Erstellen der Daten auf das Ausgabeverhalten Einfluss nehmen, nutzen Sie die
Möglichkeit, für einzelne Tags die Interpretation von Leerzeichen zu steuern. Dazu genügt es, wenn Sie
mittels DTD ein zusätzliches Attribut xml:space definieren und den Wert preserve zuweisen. In diesem Fall
wird signifikanter Leerraum nicht vom Parser entfernt.
Definition des Attributs für das Element
DATEN
<!ATTLIST DATEN xml:space (default|preserve) "preserve">"
790
BEISPIEL
Ausgehend von einer um eine DTD erweiterten Variante des vorherigen Beispielprogramms möchten wir
Ihnen die Auswirkungen des Attributes bzw. der
PreserveWhiteSpace
-Eigenschaft demonstrieren.
Die XML-Daten in einer lesbaren Form:
<?xml version="1.0"?>
<!DOCTYPE DATEN ["
<!ELEMENT DATEN (#PCDATA)>
<!ATTLIST DATEN xml:space (default|preserve) "preserve">"
"]>"
<DATEN>"
Wort1 Wort2 Wort3
Wort4 Wort5
</DATEN>
Das modifizierte Beispielprogramm:
Sub XML_Versuch_Space2()
Dim xmlDoc As New DOMDocument30
Dim s As String
xmlDoc.preserveWhiteSpace = False
s = "<?xml version=""1.0""?>" & Chr(10) & Chr(13)
s = s & "<!DOCTYPE DATEN [" & Chr(10) & Chr(13)
s = s & "<!ELEMENT DATEN (#PCDATA)>" & Chr(10) & Chr(13)
s = s & "<!ATTLIST DATEN xml:space (default|preserve) ""preserve"">" & Chr(10) & Chr(13)
s = s & "]>" & Chr(10) & Chr(13)
s = s & "<DATEN>" & Chr(10) & Chr(13) & Chr(10) & Chr(13)
s = s & " Wort1 Wort2 Wort3 " & Chr(10) & Chr(13)
s = s & Chr(9) & "Wort4 Wort5" & Chr(10) & Chr(13)
s = s & "</DATEN>"
xmlDoc.loadXML s
MsgBox xmlDoc.documentElement.Text, , "preserveWhiteSpace = False"
xmlDoc.preserveWhiteSpace = True
MsgBox xmlDoc.documentElement.Text, , "preserveWhiteSpace = True"
End Sub
In beiden Fällen erhalten Sie dasselbe Resultat, den unveränderten String:
Abbildung 12.39 XML-Daten nach der Verarbeitung
791
XML-Verarbeitung mit dem DOM

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.