Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Preserves white space only text nodes that may appear in those elements as specified by the elements
attribute.
<xsl:preserve-space
elements = tokens />
Attributes
- elements
This is a required attribute. The value is a white space separated list of name tokens of the nodes whose white space only text nodes must be preserved.
Element Information
Number of occurrences |
Unlimited |
Parent elements |
|
Child elements |
(No child elements) |
Remarks
The <xsl:preserve-space>
element preserves white-space-only text nodes in the specified elements. It has no effect on the white space characters in text nodes with both white space and non-white-space characters. Here preservation of white-space-only text nodes means that the nodes from the source document will be kept in the result document. The <xsl:strip-space> does the opposite; it strips the white-space-only text nodes in the specified nodes.
By default, all white-space-only text nodes are preserved. If an element name matches a name test in an <xsl:strip-space>
element, it is removed from the set of white-space-preserving element names. If an element name matches a name test in an <xsl:preserve-space>
element, it is added back to the set of white-space-preserving element names.
For more information, see "Whitespace Stripping", Section 3.4 of the XSLT W3 Recommendation at www.w3.org/TR/xslt.
Example
The following example illustrates the effects of preserving and stripping white-space-only text nodes using <xsl:preserve-space>
and <xsl:strip-space>
.
XML File (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 File (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>
Try It!
Copy the code above and save it in appropriate files on your local drive.
Launch the XSLT transformation, using the Command Line Transformation Utility (msxsl.exe) from a command prompt, as follows:
msxsl source.xml trans.xsl
Important
Do not start the transformation from Internet Explorer. The browser performs some space-stripping operations that are not compatible with the XSLT specifications. This can cause the XLST transformation to appear ill-behaved.
Output
This is the standard output:
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"
Notice that the transformation yields one text node for the first <code>
element, but no text node for the first <text>
element. This is because these elements both have a white-space-only text node that is preserved in <code>
but stripped in <text>
, according to the <xsl:preserve-space>
and <xsl:strip-space>
instructions listed at the beginning of the style sheet. The second and third elements of each kind show that the text nodes that are not white-space-only are not affected by those instructions.