Search Replace Functionality with XSL 1.0
It happens more often than you think, that you have to do a real search/replace within a text node. this template does exactly that. A typical usage would be: <xsl:call-template name="replaceString"> <xsl:with-param name="value" select="text()"/> <xsl:with-param name="s" select="'test'"/> <xsl:with-param name="r" select="'tester'"/> </xsl:call-template>
<!-- Replaces a string with another s: the search string r: the replace string value: the string to search in --> <xsl:template name="replaceString"> <xsl:param name="value"/> <xsl:param name="s"/> <xsl:param name="r"/>
<xsl:choose> <xsl:when test="$value = ''"> </xsl:when> <xsl:when test="$s = ''"> <xsl:value-of select="$value"/> </xsl:when> <xsl:when test="contains($value, $s)">
<xsl:value-of select="substring-before($value, $s)"/> <xsl:value-of select="$r"/> <xsl:call-template name="replaceString"> <xsl:with-param name="value" select="substring-after($value, $s)"/> <xsl:with-param name="s" select="$s"/> <xsl:with-param name="r" select="$r"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$value"/> </xsl:otherwise> </xsl:choose> </xsl:template>
|