This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Infinite Loop when trying to use String-Replace
- To: xsl-list at lists dot mulberrytech dot com
- Subject: RE: [xsl] Infinite Loop when trying to use String-Replace
- From: Christopher_Dant at jackmorton dot com
- Date: Wed, 31 Oct 2001 14:48:52 -0500
- Reply-To: xsl-list at lists dot mulberrytech dot com
I 'd suggest that you try Saxon instead either from the command line or
from with Stylus. You can use Saxon in Stylus:
- Tools > Options > External XSLT
- In "Default custom processor command line put something like:
c:\xsltproc\oraxml\saxon.exe %1 %2 %3
You can download the compiled version of Instant Saxon (for Windows
platform) from its SourceForge project page at
http://sourceforge.net/projects/saxon.
Note that Stylus just won't do everything you'll need it to, though it's
getting better. One last thought - I've found it helpful to have several
XSLT processors on hand for debugging and experimentation. More than once I
gained a crucial insight from an a processor that I wasn't using regularly.
HTH,
Chris
Christopher Dant
Technology Director
Jack Morton Worldwide
Christopher_Dant@jackmorton.com
Voice (973) 581-1700 x141
Fax (973) 581-1701
-- NEW PHONE NUMBERS --
"Mataczynski, Jeff"
<Jeff.Mataczynski@westgroup To: "'Jeni Tennison'"
.com> <jeni@jenitennison.com>
Sent by: cc: "'XSL-List@lists.mulberrytech.com'"
owner-xsl-list@lists.mulber <XSL-List@lists.mulberrytech.com>
rytech.com Subject: RE: [xsl] Infinite Loop when trying
to use String-Replace
10/31/2001 02:08 PM
Please respond to xsl-list
I tried using your template, but Stylus is still detecting an infinite
loop.
Any other suggestions?
Jeff
-----Original Message-----
From: Jeni Tennison [mailto:jeni@jenitennison.com]
Sent: Wednesday, October 31, 2001 12:53 PM
To: Mataczynski, Jeff
Cc: 'XSL-List@lists.mulberrytech.com'
Subject: Re: [xsl] Infinite Loop when trying to use String-Replace
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
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list