xsl:preserve-space
(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 6.)
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
Die Deklaration xsl:preserve-space legt fest, innerhalb welcher Elemente Whitespace-Nodes beibeihalten und in das Ergebnisdokument kopiert werden sollen. Es ist in diesem Zusammenhang der Gegenspieler zu xsl:strip-space.
Klassifizierung | Deklaration |
Funktionsgruppe | Regulierung von Weißraum |
Einführung | XSLT 1.0 |
Position im Stylesheet und erlaubte Inhalte:
xsl:preserve-space tritt als Deklaration nur als unmittelbares Child-Element der Wurzelelemente xsl:stylesheet oder xsl:transform auf. Das Element ist dabei stets leer.
Attribute:
Es gelten die Standardattribute. Daneben besitzt xsl:preserve-space ein obligatorisches Attribut elements.
elements
Wert | tokens |
Verwendung | obligatorisch |
Einführung | XSLT 1.0 |
Das elements-Attribut nennt in Form einer durch Leerzeichen getrennten Tokenliste die Bezeichner derjenigen Elemente, für deren Inhalt Whitespace-Nodes erhalten werden sollen. Zusätzlich oder alternativ zu Bezeichnern dürfen auch Wildcards wie "*" oder "mein-ns:*" verwendet werden.
Verwendungszweck:
Die Anweisung xsl:preserve-space erhält Whitespace-Nodes im Inhalt derjenigen Elemente, die in seiner Tokenliste enthalten sind. Unter Whitespace-Nodes sind Textnodes zu verstehen, die ausschließlich aus Leerzeichen, Zeilenumbruchsbefehl, Wagenrücklauf oder Tabulator bestehen.
Whitespace-Nodes können daher nur zwischen Elementen auftreten, nicht etwa angrenzend an Textknoten, da sie diesen sonst zugeschlagen werden. Folgen aus Whitespace-Zeichen am Anfang oder Ende von Textknoten zählen zum »signifikanten« Weißraum und werden weder von xsl:strip-space noch xsl:preserve-space beachtet. Sie können allenfalls Gegenstand einer Normalisierung werden.
Die Beibehaltung von Whitespace-Nodes im Output entspricht dem Defaultverhalten des XSLT-Prozessors. Die Verwendung von xsl:preserve-space ist daher nur erforderlich, wenn im gleichen Stylesheet ebenfalls die Deklaration xsl:strip-space verwendet wird und sichergestellt werden soll, dass Whitespace-Nodes für bestimmte Elemente in jedem Fall erhalten bleiben sollen.
Beispiel – Anwendung von xsl:preserve-space und xsl:strip-space:
Quelldokument (Ausschnitt):
<beispiel>Dies ist ein <strong>einfaches</strong> <emph>Beispiel</emph> für gemischten Inhalt.</beispiel>
Stylesheet:
...
<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="beispiel"/>
...
<xsl:template match="beispiel">
<p><xsl:apply-templates/></p>
</xsl:template>
Ergebnis:
Ohne die Anwendung von xsl:preserve-space würde innerhalb des Elements <beispiel> auch der – hier bedeutungstragende – Weißraum zwischen der Endmarke </strong> und der Startmarke <emph> entfernt. Dies liegt daran, dass das elements-Attribut von xsl:strip-space wegen des Wildcard-Selektors * pauschal alle Elemente erfasst, also auch <beispiel>.
Das Ergebnis sähe (ohne xsl:preserve-space) folgendermaßen aus – die problematische Stelle wurde durch Fettmarkierung hervorgehoben:
<p>Dies ist ein einfachesBeispiel für gemischten Inhalt.</p>
Wird durch xsl:preserve-space »gegengesteuert«, so erhält man wie gewünscht folgenden Output:
<p>Dies ist ein einfaches Beispiel für gemischten Inhalt.</p>
Elementdefinition:
XSLT 1.0:
<!-- Category: top-level-element -->
<xsl:preserve-space
elements = tokens />
XSLT 2.0:
<!-- Category: declaration -->
<xsl:preserve-space
elements = tokens />
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