trim.text — Trim leading and trailing whitespace from a text node
Given a text node, this function trims leading and trailing whitespace from it and returns the trimmed contents.
<xsl:template name="trim.text"> <xsl:param name="contents" select="."></xsl:param> <xsl:variable name="contents-left-trimmed"> <xsl:call-template name="trim-left"> <xsl:with-param name="contents" select="$contents"></xsl:with-param> </xsl:call-template> </xsl:variable> <xsl:variable name="contents-trimmed"> <xsl:call-template name="trim-right"> <xsl:with-param name="contents" select="$contents-left-trimmed"></xsl:with-param> </xsl:call-template> </xsl:variable> <xsl:value-of select="$contents-trimmed"></xsl:value-of> </xsl:template> <xsl:template name="trim-left"> <xsl:param name="contents"></xsl:param> <xsl:choose> <xsl:when test="starts-with($contents,' ') or starts-with($contents,'') or starts-with($contents,' ') or starts-with($contents,' ')"> <xsl:call-template name="trim-left"> <xsl:with-param name="contents" select="substring($contents, 2)"></xsl:with-param> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$contents"></xsl:value-of> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="trim-right"> <xsl:param name="contents"></xsl:param> <xsl:variable name="last-char"> <xsl:value-of select="substring($contents, string-length($contents), 1)"></xsl:value-of> </xsl:variable> <xsl:choose> <xsl:when test="($last-char = ' ') or ($last-char = '') or ($last-char = ' ') or ($last-char = ' ')"> <xsl:call-template name="trim-right"> <xsl:with-param name="contents" select="substring($contents, 1, string-length($contents) - 1)"></xsl:with-param> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$contents"></xsl:value-of> </xsl:otherwise> </xsl:choose> </xsl:template>