Subject: RE: Error: when distance between section definitions exceed 3678 (roughly)
From: geoff hopkins <geoffhopkins123@xxxxxxxxx>
Date: Wed, 14 Dec 2005 07:21:26 -0800 (PST)
|
got a copy of saxon 8.6.1 (open source version) and it
did not handle this, same error.
--- Michael Kay <mike@xxxxxxxxxxxx> wrote:
> 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: 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
>
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
|