XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Brandon H.Subject: XSLT - Trapped in Recursive Template Loop
Author: Brandon H.
Date: 01 Dec 2005 04:21 PM
I have an XSL stylesheet which is transforming XML into Excel. One section of the report using some complicated recursive looping to generate a 3 column tiling function.

The stylesheet uses two templates to achieve this tiling - code as follows.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
.....

<!--- Here is the template call from the main template -->
<xsl:apply-templates select="/OFFER/KIT-Children/KIT" />
.....

<!--- Here is the match template for KIT --->
<xsl:template match="KIT">
<xsl:call-template name="Kits">
<xsl:with-param name="cycle_count" select="1" />
</xsl:call-template>
</xsl:template>

<xsl:template name="Kits" xmlns="urn:schemas-microsoft-com:office:spreadsheet">

<xsl:param name="cycle_count" />

......
<xsl:if test="some logic test">
......

<xsl:call-template name="Kits">
<xsl:with-param name="cycle_count" select="$cycle_count + 1" />
</xsl:call-template>

</xsl:if>

</xsl:template>


I walk this transformation with my debugger and see that it fails the <xsl:if.../> logic test and exits the 'Kits' named template, but then the transform loops back to the:

<xsl:template match="KIT">
<xsl:call-template name="Kits">
<xsl:with-param name="cycle_count" select="1" />
</xsl:call-template>
</xsl:template>

Which calls the named 'Kits' template again with the reset 'cycle_count' parameter - this causes the transformation to get stuck in a never-ending recursive loop.

Any ideas as to what I am doing wrong here?

Postnext
Minollo I.Subject: XSLT - Trapped in Recursive Template Loop
Author: Minollo I.
Date: 01 Dec 2005 05:21 PM
Brandon,
from what you are describing I would expect the match="KIT" template to be executed as many times as many /OFFER/KIT-Children/KIT elements you have in your source document, because you are doing <xsl:apply-templates select="/OFFER/KIT-Children/KIT"/>.

But I wouldn't expect an infinite loop as long as the <xsl:if> logic is properly implemented. Have you verified if the match="KIT" template is being executed every time with the same context note? You can see the context node in the Stylus Studio Variables window.

Minollo

Posttop
Brandon H.Subject: XSLT - Trapped in Recursive Template Loop
Author: Brandon H.
Date: 02 Dec 2005 11:10 AM
Minollo,

Thanks a lot - that was exactly the problem. I was matching on 'KIT' which was returning 15 nodes, thus making my match template run 15 times.

I moved the match down one level and was able to make small modifications to my nodeset loads to solve the problem.

Thanks again.

Brandon

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.