I was able to get one step closer to my goal...
Here is my replace function and the recursive call:
<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>
<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>
As you can see, I have my changes saved as text and link.
By changing two VALUE-OF statemetns by COPY-OF statatements I was able to
get the last change to hold the anchor, but all other previous replacements
dissapear.
Is there a way to send a parameter to a function containing the anchor
values?
I think that there is where I loose the anchors, since I have to resend the
variables, the copy-of does not stick and the anchor information is lost.
I tried using
<xsl:with-param ...>
<xsl:copy-of select ...>
</xsl:with-param>
but that doesn't seem to work either.
From: "Ignacio Garcia del Campo" <igarc001(_at_)hotmail(_dot_)com>
Reply-To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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.
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--