Subject: RE: [xsl] Multiple String Replacements [with a twist] From: "Ignacio Garcia del Campo" <igarc001@xxxxxxxxxxx> Date: Tue, 27 Mar 2007 15:58:12 -0400 |
<xsl:template name="replace-string"> <xsl:param name="text"/> <xsl:param name="from"/> <xsl:param name="to"/>
<xsl:choose> <xsl:when test="contains($text, $from)">
<xsl:variable name="before" select="substring-before($text, $from)"/> <xsl:variable name="after" select="substring-after($text, $from)"/> <xsl:variable name="prefix" select="concat($before, $to)"/> <xsl:value-of select="$before"/> <xsl:copy-of select="$to"/> <xsl:call-template name="replace-string"> <xsl:with-param name="text" select="$after"/> <xsl:with-param name="from" select="$from"/> <xsl:with-param name="to" select="$to"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$text"/> </xsl:otherwise> </xsl:choose>
<xsl:template name="replace-strings"> <xsl:param name="text" /> <xsl:param name="changes" /> <xsl:param name="count" />
<xsl:param name="returnString"> <xsl:call-template name="replace-string"> <xsl:with-param name="text" select="$text"/> <xsl:with-param name="from" select="$changes/change[$count]/text" /> <xsl:with-param name="to" select="$changes/change[$count]/link" /> </xsl:call-template> </xsl:param>
<xsl:if test="$count > 1"> <xsl:call-template name="replace-strings"> <xsl:with-param name="text" select="$returnString" /> <xsl:with-param name="changes" select="$changes" /> <xsl:with-param name="count" select="$count - 1" /> </xsl:call-template> </xsl:if>
<xsl:if test="$count = 1"> <xsl:copy-of select="$returnString" /> </xsl:if> </xsl:template>
I tried using <xsl:with-param ...> <xsl:copy-of select ...> </xsl:with-param>
From: "Ignacio Garcia del Campo" <igarc001@xxxxxxxxxxx> Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: [xsl] Multiple String Replacements [with a twist] Date: Tue, 27 Mar 2007 14:56:11 -0400
Hello all,
I just started working with XSLT and I find my self stuck on this issue.
I want to replace multiple strings for some for most of my elements and by looking at some discussions and some code by Jeni Tennison I can replace all instances of my strings by a simple replacement. However, what I actually want to do, is to replace the strings by links.
My replacements look like this:
<foo:string_replacements>
<foo:search>
<foo:find>XML</foo:find>
<foo:replace><a href="xml.com">XML-SITE</a></foo:replace>
</foo:search>
</foo:string_replacements>
If I use <xlst:copy-of select="foo:search[xx]/replace" /> the HTML shows the link correctly, but since I am doing multiple substitions of multiple strings I use recursion, and the function where the strings are exchanged fails to correctly place the anchor code on the output.
I get XML replaced by XML-SITE but the anchor information is lost in the process.
I have tried using CDATA sections, but then as you might expect I get the escaped string and that's not good either.
Does anyone know how to solve this problem?
I have been using something similar to this: http://sources.redhat.com/ml/xsl-list/2000-06/msg00200.html, but I need the links to be working.
Thanks.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Multiple String Replacements , Ignacio Garcia del C | Thread | Re: [xsl] Multiple String Replaceme, David Carlisle |
RE: [xsl] for-each-group, cknell | Date | Re: [xsl] Multiple String Replaceme, David Carlisle |
Month |