This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Infinite Loop when trying to use String-Replace
- To: "Mataczynski, Jeff" <Jeff dot Mataczynski at westgroup dot com>
- Subject: Re: [xsl] Infinite Loop when trying to use String-Replace
- From: Jeni Tennison <jeni at jenitennison dot com>
- Date: Wed, 31 Oct 2001 18:52:38 +0000
- CC: "'XSL-List at lists dot mulberrytech dot com'" <XSL-List at lists dot mulberrytech dot com>
- Organization: Jeni Tennison Consulting Ltd
- References: <D5AC91A926FBD41196060006298F244C019C8CB5@eg-msgmbx-b06.int.westgroup.com>
- Reply-To: xsl-list at lists dot mulberrytech dot com
Hi Jeff,
> I'm trying to use a string-replace template in order to replace all
> occurences of the character "é" in a string. However, when I
> try to run it in Stylus, I keep getting an error that the XSL
> processor has detected an infinite loop. I cannot determine why I'm
> getting this.
There isn't an infinite loop with the source that you sent, but
perhaps Stylus is really clever and is detecting one anyway because
contains($string, $from) returns true if $from is an empty string. The
template is a bit strange anyway, because it always gives the value
after the $from in the $string as well as than stepping on
recursively. Try the following:
<xsl:template name="string-replace">
<xsl:param name="string"/>
<xsl:param name="from"/>
<xsl:param name="to"/>
<xsl:choose>
<xsl:when test="string($from) and contains($string, $from)">
<xsl:value-of select="substring-before($string, $from)" />
<xsl:value-of select="$to"/>
<xsl:call-template name="string-replace">
<xsl:with-param name="string"
select="substring-after($string, $from)" />
<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="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
I hope that helps,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list