<xsl:preserve-space>-Element
Behält Textknoten bei, die nur Leerraum enthalten, die in diesen Elementen enthalten sein können, wie vom elements
-Attribut angegeben.
<xsl:preserve-space
elements = tokens />
Attribute
- elements
Dies ist ein erforderliches Attribut. Der Wert ist eine durch Leerraum getrennte Liste von Namentokens für die Knoten, deren Leerraum-Textknoten beibehalten werden müssen.
Elementinformationen
Anzahl der Vorkommen |
Unbegrenzt |
Übergeordnete Elemente |
|
Untergeordnete Elemente |
(Keine untergeordneten Elemente) |
Hinweise
Das <xsl:preserve-space>
-Element behält Leerraum-Textknoten in den angegebenen Elementen bei. Dies wirkt sich nicht auf Leerraumzeichen in Textknoten aus, die sowohl Leerraumzeichen als auch andere Zeichen enthalten. Die Beibehaltung von Leerraum-Textknoten bedeutet an dieser Stelle, dass die Knoten aus dem Quelldokument im Ergebnisdokument erhalten bleiben. <xsl:strip-space> bewirkt das Gegenteil. Die Leerraum-Textknoten werden in den angegebenen Knoten entfernt.
Standardmäßig werden alle Leerraum-Textknoten beibehalten. Wenn ein Elementname einem Namenstest in einem <xsl:strip-space>
-Element entspricht, wird er aus der Gruppe der Elementnamen entfernt, für die Leerraum beibehalten werden soll. Wenn ein Elementname einem Namenstest in einem <xsl:preserve-space>
-Element entspricht, wird er wieder der Gruppe von Elementnamen hinzugefügt, für die Leerraum beibehalten werden soll.
Weitere Informationen finden Sie unter "Whitespace Stripping", Abschnitt 3.4 der XSLT-Empfehlung der W3C unter www.w3.org/TR/xslt (nur in englischer Sprache).
Beispiel
Im folgenden Beispiel wird erläutert, welche Auswirkungen das Beibehalten und Entfernen von Leerraum-Textknoten mithilfe von <xsl:preserve-space>
und <xsl:strip-space>
hat.
XML-Datei (source.xml)
<?xml version="1.0"?>
<document>
<text> </text>
<text> ;</text>
<text>
This is a sample text
</text>
<code> </code>
<code> ;</code>
<code>
This is a sample code
</code>
</document>
XSLT-Datei (trans.xsl)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<!--
The following xsl:preserve-space is not necessary.
It is included to emphasize the fact that white-space-only
text nodes are to be preserved on the <code> elements.
-->
<xsl:preserve-space elements="code"/>
<xsl:strip-space elements="text"/>
<xsl:template match="/">
code elements:
<xsl:apply-templates select="//code"/>
text elements:
<xsl:apply-templates select="//text"/>
</xsl:template>
<xsl:template match="text">
text # <xsl:value-of select="position()"/>
has <xsl:value-of select="count(text())"/> text().
"<xsl:value-of select="translate(.,' 	', '-NRT')"/>"
</xsl:template>
<xsl:template match="code">
code # <xsl:value-of select="position()"/>
has <xsl:value-of select="count(text())"/> text().
"<xsl:value-of select="translate(.,' 	', '-NRT')"/>"
</xsl:template>
</xsl:stylesheet>
Probieren Sie es aus!
Kopieren Sie den oben stehenden Code, und speichern Sie ihn in entsprechenden Dateien auf dem lokalen Laufwerk.
Starten Sie die XSL-Transformation, indem Sie das Kommandozeilendienstprogramm zur Transformation (msxsl.exe) an einer Eingabeaufforderung folgendermaßen aufrufen:
msxsl source.xml trans.xsl
Wichtig
Starten Sie die Transformation nicht aus Internet Explorer. Der Browser führt Operationen zum Entfernen von Leerraum aus, die nicht mit dem XSLT-Spezifikationen kompatibel sind. Dies kann dazu führen, dass die XLST-Transformation nicht erwartungsgemäß erfolgt.
Ausgabe
Dies ist die Standardausgabe:
code elements:
code # 1
has 1 text().
"---"
code # 2
has 1 text().
"--;"
code # 3
has 1 text().
"NThis-is-a-Tsample-codeTNTN"
text elements:
text # 1
has 0 text().
""
text # 2
has 1 text().
"--;"
text # 3
has 1 text().
"NThis-is-a-Tsample-textTNTN"
Beachten Sie, dass die Transformation nur einen Textknoten für das erste <code>
-Element zurückgibt. Es wird jedoch kein Textknoten für das erste <text>
-Element zurückgegeben. Dies liegt daran, dass diese Elemente beide über einen Leerraum-Textknoten verfügen, der in <code>
erhalten, in <text>
jedoch entfernt wird. Dies entspricht der <xsl:preserve-space>
-Anweisung und der <xsl:strip-space>
-Anweisung, die am Anfang des Stylesheets aufgeführt sind. Das zweite und das dritte Element zeigen jeweils, dass diese Anweisungen keine Auswirkungen auf Textknoten haben, bei denen es sich nicht um Leerraum-Textknoten handelt.