Das Problem mit den Whitespace Nodes

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 1.)

Flüchtig betrachtet sieht alles schon einigermaßen ansprechend aus. Bei Blick in den Quelltext zeigen sich allerdings einige unschöne Details. Die Formatie­rung der einzelnen Adressen entspricht leider noch nicht der beabsichtigten. Der XSLT-Prozessor erzeugt (Leerzeichen hier dargestellt) folgendes Ergebnis:

     ...
     <p>
         <b>
            Peter
            Mustermann
            </b><br>
         Wagenstr.5a,
         12345Beispielshausen
         
     </p>
     ...

Code-Beispiel: kap01/1.16.1/adressen.html.

Einiges davon mag für die gewünschte Verwendung nicht besonders stören, überflüssige Leerzeichen und Umbrüche beispielsweise entfernt der Browser bei der Darstellung der HTML-Seite. Man kann sie (vorerst) außer acht lassen.

Ärgerlich dagegen ist das Fehlen von Leerzeichen zwischen Straßenname und Hausnummer sowie zwischen Postleitzahl und Ort

Die vermissten Leerzeichen

Abbildung: Die vermissten Leerzeichen.

Die meisten der Umbrüche und Einrückungen stammen offensichtlich aus dem mit Rücksicht auf Lesbarkeit formatierten Quelldokument. Solche Bereiche zwischen Elementen, die nur aus Leerzeichen und Umbrüchen bestehen, bezeichnet man als Whitespace Nodes.

Welches genau sind die Whitespace-Zeichen in Whitespace Nodes?
Ein Whitespace Node ergibt sich, wenn ein Textknoten nur folgende Zeichen enthält: das Leerzeichen (SPC, #20), Zeilenumbruch (LF, #0A), Tabulator (TAB, #09) und Wagenrücklauf (CR, #0D). Achtung: In XML 1.1 gelten die Zeilenum­bruchzeichen #x85 und #x2028 aus der Mainframe-Syntax zusätzlich als Leerraum. Der XML-Parser ersetzt allerdings bereits beim Einlesen des Dokuments alle Umbruchzeichen im Quelltext pau­schal durch LF.

Sie sehen, dass bei der Extraktion des Stringwertes von <name> ebenfalls die Zeilenumbrüche berücksichtigt werden. Es findet durch xsl:value-of hierbei also keine Normalisierung statt; führende und fol­gende Leerzeichen bleiben erhalten.

Dies betrifft jedoch nur Weißraum aus dem Quelldokument: Die Umbrüche zwischen den xsl:value-of-Instruktionen aus dem Anschriften-Template des Stylesheets wurden demzufolge unterschlagen – mit Ausnahme jener Stelle, an der das Komma steht.

Im Stylesheet hingegen zählen Whitespace Nodes nicht zu den literalen Zei­chendaten, ansonsten müssten sie natürlich kopiert werden. Ein Textknoten dagegen, der auch nur ein nutzbares Zeichen enthält, wird komplett kopiert.

Erklärung
Whitespace Nodes zwischen Elementen des Quelldokuments werden als bedeutungstragend (significant) betrachtet und vom Prozessor deshalb in den Ergebnisbaum kopiert. Whitespace Nodes, die im Stylesheet zwischen Instruktionen oder Literal Result Elements stehen, werden dagegen verwor­fen.

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn