I am trying to modify strings like:
Some {words} should be {bold} ...
to something like
Some <b>words</b> should be <b>bold</b> ...
However, my implementation forgets all <b> elements but the last one:
Some words should be <b>bold</b> ...
I think, that the substring-before() removes the already inserted <b> elements.
Here is my code:
<xsl:template name="replace">
<xsl:param name="input"/>
<xsl:variable name="before" select="substring-before( $input, '{' )" />
<xsl:variable name="after" select="substring-after( $input, '}' )" />
<xsl:variable name="replace" select="substring-after( substring-before( $input, '}' ), '${' )" />
<xsl:choose>
<xsl:when test="$replace">
<xsl:call-template name="replace">
<xsl:with-param name="input">
<xsl:value-of select="$before" />
<xsl:element name="b">
<xsl:value-of select="$replace" />
</xsl:element>
<xsl:value-of select="$after" />
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$input" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Any ideas? Thanks for your help.
As you have tagged the question as XSLT 2.0 I strongly suggest to use
analyze-stringi.e. withand the stylesheet
outputs