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>