[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Too many apply-templates call error -- can't figur

Subject: RE: Too many apply-templates call error -- can't figure out what causes the error
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 18 Nov 2005 11:39:13 -0000
string replace word
> Hi! the listEXP.txt i have included here is just a
> part of the actual listEXP.txt; on the original list
> there are 1400 strings. what i have listed below
> consist only 9 strings. i tested the xsl again using
> the list of 9 strings and it was ok. so i think the
> error comes in when the list is too big for the
> processor... am i correct at this??? if so how can i
> correct my xsl so that i can handle a list file with
> many strings???

Yes, I was coming to the same conclusion. Your code appears to be
essentially correct but has run out of stack space. Saxon should be able to
handle this with a technique called tail call optimization - your recursive
call is the last thing the function does, so the optimizer should turn it
into a loop. It's not clear to me at first sight why this isn't happening.
If you can send me the required files I'll take a look at it, though it may
not be for a few days.

Michael Kay
http://www.saxonica.com/

>
> --UlyLee
>
> --- UlyLee <ulyleeka@xxxxxxxxx> wrote:
>
> > I'm running an xsl transformation using saxon 8.6
> > and
> > i encounter this error, 'too many apply-template
> > calls'. The purpose of the xslt is to tag all
> > strings
> > in the listEXP.txt file with EXP. I have 2 templates
> > to match, 1st the template that matches * which
> > simply
> > copies the element and its attributes. the 2nd is a
> > template that matches
> > text()[name(parent::*)!='EXP'],
> > here it should search all the occurrences of the
> > strings and tag it with EXP.
> >
> > I have created two functions, 1 is the
> > tmpReplacement
> > function which creates a tree of strings that i will
> > use as temporary replacement strings. and the other
> > is
> > the replace-all function that do the search and
> > replace function.
> >
> > the error message points me to the apply-templates
> > in
> > the template that matches * but i think thats not
> > the
> > one actually causing the error because when i remove
> > the elements that calls the replace-all function the
> > transformation is a success.
> >
> > so i think the error is in the replace-all function
> > but i can't seem to find out which part of the
> > function is actually causing it.
> >
> > this is the xsl file:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xsl:stylesheet version="2.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> > xmlns:xs="http://www.w3.org/2001/XMLSchema"
> > xmlns:f="data:,f">
> > <xsl:output method="xml" version="1.0"
> > encoding="utf-8" indent="yes"/>
> > <xsl:variable name="wordLst" as="xs:string*">
> > <xsl:analyze-string
> > select="unparsed-text('listEXP.txt','utf-8')"
> > regex="[\r\n]">
> > <xsl:non-matching-substring>
> > <xsl:value-of select="."/>
> > </xsl:non-matching-substring>
> > </xsl:analyze-string>
> > </xsl:variable>
> > <xsl:template match="/">
> > <xsl:apply-templates/>
> > </xsl:template>
> > <xsl:template match="*">
> > <xsl:element name="{name(.)}">
> > <xsl:copy-of select="@*"/>
> > <xsl:apply-templates/>
> > </xsl:element>
> > </xsl:template>
> > <xsl:template
> > match="text()[name(parent::*)!='EXP']">
> > <xsl:variable name="repLst" as="xs:string*"
> > select="for $i in (1 to count($wordLst)) return
> > f:tempReplacement($i)"/>
> > <xsl:variable name="tmpStr"
> > select="f:replace-all(.,$wordLst,$repLst,1)"/>
> > <xsl:value-of
> > select="f:replace-all($tmpStr,$repLst,$wordLst,0)"/>
> > </xsl:template>
> > <!--Function that creates a tree node of temporary
> > replacement strings.-->
> > <xsl:function name="f:tempReplacement"
> > as="xs:string">
> > <xsl:param name="value" as="xs:integer"/>
> > <xsl:value-of select="if ($value &lt; 10) then
> > concat('replacement','00',$value) else if ($value
> > &gt;
> > 9 and $value &lt; 100) then
> > concat('replacement','0',$value) else
> > concat('replacement',$value)"/>
> > </xsl:function>
> > <!--Function that simulates a replace-all function
> > and
> > returns the replaced string.-->
> > <xsl:function name="f:replace-all">
> > <xsl:param name="input" as="xs:string"/>
> > <xsl:param name="words-to-replace" as="xs:string*"/>
> > <xsl:param name="replacement" as="xs:string*"/>
> > <xsl:param name="flag" as="xs:integer"/>
> > <xsl:choose>
> > <xsl:when test="$flag=1">
> > <xsl:sequence select="if (exists($words-to-replace))
> > then f:replace-all(replace($input,
> > replace($words-to-replace[1], '[.\\?*+{}()\[\]^$]',
> > '\\$0'),
> >
> $replacement[1],'i'),remove($words-to-replace,1),remove($repla
> cement,1),1)
> > else $input"/>
> > </xsl:when>
> > <xsl:otherwise>
> > <xsl:sequence select="if (exists($words-to-replace))
> > then f:replace-all(replace($input,
> > replace($words-to-replace[1], '[.\\?*+{}()\[\]^$]',
> > '\\$0'),
> >
> concat('<EXP>',$replacement[1],'</EXP>')),remove($words-to-rep
> lace,1),remove($replacement,1),0)
> > else $input"/>
> > </xsl:otherwise>
> > </xsl:choose>
> > </xsl:function>
> > </xsl:stylesheet>
> >
> > this is the listEXP.txt
> > Faire-part
> > Par-dessus
> > S. Prieure
> > dernier-ni
> > sang-froid
> > sage-femme
> > Brise-bise
> > branle-bas
> > ` peu prhs
> >
> > here is the source xml:
> > <?xml version="1.0" encoding="ISO-8859-1"?>
> > <CORPUS>
> > <T1>
> > <LIB>
> > <T>1901-1913</T>trois cent soixante-cinq
> > chambres ` coucher
> > <EXP>Faire-part</EXP>
> > Faire-part
> > sage-femme
> > Brise-bise
> > branle-bas
> > ` peu prhs
> > </LIB>
> > </T1>
> > </CORPUS>
> >
> >
> > thanks,
> > UlyLee
> >
> >
> >
> >
> >
> > __________________________________
> > Yahoo! Mail - PC Magazine Editors' Choice 2005
> > http://mail.yahoo.com
> >
> >
>
>
>
>
> __________________________________
> Yahoo! FareChase: Search multiple travel sites in one click.
> http://farechase.yahoo.com

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.