Subject: [xsl] XSLT 1.0 Stack Overflow Question From: "Roger L. Cauvin" <roger@xxxxxxxxxx> Date: Fri, 13 Jul 2007 12:40:06 -0500 |
I'm parsing raw text (not XML or a node-set) that contains a long list of items separated by linefeeds. Let's say it's a list of action items: Action Items 1. Ensure all tests pass. 2. Get sign-off on documentation from Amy. 3. Create a new page on web site for product. 4. Move product from staging area to production. . . . 205. Send press release announcing release. What I want to do is find the item with the greatest number of characters in it. So I have a recursive template: <xsl:template name="get-longest-item"> <xsl:param name="items"/> <xsl:variable name="index"> <xsl:value-of select="substring-before(substring-after($items, ' '), '.')"/> </xsl:variable> <xsl:choose> <xsl:when test="$index = ''"> <xsl:text disable-output-escaping="yes">-1%-1</xsl:text> </xsl:when> <xsl:otherwise> <xsl:variable name="item"> <xsl:value-of select="substring-before(substring-after($items, '. '), ' ')"/> </xsl:variable> <xsl:variable name="length" select="string-length($item)"/> <xsl:variable name="longest-of-rest"> <xsl:call-template name="get-longest-item"> <xsl:with-param name="items" select="substring-after($items, ' ')" /> </xsl:call-template> </xsl:variable> <xsl:choose> <xsl:when test="$length > substring-after($longest-of-rest, '%')"> <xsl:value-of select="concat($index, '%', $length)" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="$longest-of-rest" /> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template> The template "returns" the index of the longest item, followed by the percent symbol, followed by the length of that item. For a large list of action items, applying this template results in a stack overflow. A binary divide-and-conquer approach would make much more efficient use of stack space, but I can't figure out how to do it using XSLT 1.0. I try to cut the text into two halves, but doing so inevitably seems to involve order N recursion.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XSL-FO plain text process, Kai Hackemesser | Thread | RE: [xsl] XSLT 1.0 Stack Overflow Q, Michael Kay |
Re: [xsl] Clientside XSLT Transform, Manfred Staudinger | Date | Re: [xsl] Clientside XSLT Transform, Andrew Welch |
Month |