Subject: RE: [xsl] Error: when distance between section definitions exceed 3678 (roughly) From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 30 Nov 2005 18:45:52 -0000 |
Your stylesheet makes one call on xsl:apply-templates for each sibling. When there are 3678 siblings there are going to be 3678 nested apply-templates calls. Many processors under such conditions will run out of stack space. Your apply-templates calls are the last thing each template does, so they are amenable to an optimization technique called tail-call-optimization. I would have expected Saxon 6.5.x to apply this technique, but it's a long time ago so I can't be sure. Certainly Saxon 8.x should handle it. However, if you are determined to use MSXML for a problem that it can't handle, then I can't help you. The following tests are wrong: <xsl:if test=".!=contains(.,$SSDD_START)"> > <xsl:if test=".=starts-with(.,$REQ_START) You're comparing a singleton node-set to a boolean, which will always be true. I don't know whether fixing that will help you. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: geoff hopkins [mailto:geoffhopkins123@xxxxxxxxx] > Sent: 30 November 2005 14:43 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Error: when distance between section > definitions exceed 3678 (roughly) > > The basic premise of the xsl below is to define > sections that fall between two marker points > 'Application Software Requirements and 'Service > Function Requirements' . The problem I have is if > these two marker points have roughly 3678 (or more) > other nodes between then > > i.e. > > 1. <root> > 2. <text>'Application Software Requirements</text> > 3. <text></text> > .. > .. > 3685. <text>Service Function Requirements</text> > 3686. <text></text> > </root> > > I get this error message (MSXML4.0) > Code: 0x80004005 > The XSL Processor stack has overflowed - probable > cause is infinite template recursion. > I get this error message (Saxon 6.5.3) > An exception of type 'java/lang/StackOverflowError' > was not handled > > Unfortunately I am tied into MSXML for this project, > any ideas why this is happening? do I need to redefine > my xsl, if yes will need a good guide as I am quite > rubbish at it. > > Regards, > > Geoff > > p.s. can't supply the source xml as it contains > sensitive data. > > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:output method="xml" indent="yes"/> > <xsl:variable name="SSDD_START">Application Software > Requirements</xsl:variable> > <xsl:variable name="SSDD_STOP">Service Function > Requirements</xsl:variable> > <xsl:variable name="REQ_START">R[</xsl:variable> > <xsl:variable name="REQ_STOP">]</xsl:variable> > > <xsl:param name="DOC_REF"/> > > <xsl:template match="pdf2xml"> > <root> > <artefact doc_ref="{$DOC_REF}"> > <xsl:apply-templates select="text[1]"/> > </artefact> > </root> > </xsl:template> > > <xsl:template match="text"> > <xsl:if test=".!=contains(.,$SSDD_START)"> > <xsl:if test=".=starts-with(.,$REQ_START) and > substring(.,string-length(.),1)=$REQ_STOP"> > <instance type_id="1"> > <xsl:attribute name="doc"> > <xsl:value-of select="$DOC_REF"/> > </xsl:attribute> > <xsl:attribute name="sec"> > <xsl:value-of select="."/> > </xsl:attribute> > </instance> > </xsl:if> > </xsl:if> > <xsl:apply-templates > select="following-sibling::text[1]"/> > </xsl:template> > > <xsl:template match="text[contains(.,'Service Function > Requirements')]"> > <xsl:apply-templates > select="following-sibling::text[contains(.,$SSDD_START)][1]"/> > </xsl:template> > > <xsl:template match="text[1]"> > <xsl:apply-templates > select="following-sibling::text[contains(.,$SSDD_START)][1]"/> > </xsl:template> > > </xsl:stylesheet> > > > > > __________________________________ > Yahoo! Mail - PC Magazine Editors' Choice 2005 > http://mail.yahoo.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Error: when distance between , geoff hopkins | Thread | Re: [xsl] Error: when distance betw, Dimitre Novatchev |
RE: [xsl] Experiences comparing per, Michael Kay | Date | Re: [xsl] Experiences comparing per, Jon Gorman |
Month |