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 ent­halten sind. Unter Whitespace-Nodes sind Textnodes zu verstehen, die aus­schließlich aus Leerzeichen, Zeilenumbruchsbefehl, Wagenrücklauf oder Tabu­lator bestehen.

Whitespace-Nodes können daher nur zwischen Elementen auftreten, nicht etwa angrenzend an Textknoten, da sie diesen sonst zugeschlagen werden. Fol­gen 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 Nor­malisierung werden.

Die Beibehaltung von Whitespace-Nodes im Output entspricht dem Default­verhalten 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 sol­len.

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&uuml;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&uuml;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