Re: [xsl] Parent Node recursion template fails

Subject: Re: [xsl] Parent Node recursion template fails
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Wed, 08 Feb 2012 18:07:16 -0500
Hi again,

On 2/8/2012 6:05 PM, David Carlisle wrote:
<xsl:template match="*" mode="navigation-special_paint-selected">
<xsl:param name="node-id"/>
<xsl:choose>
<xsl:when test="generate-id() = $node-id">
<xsl:attribute name="background">#eee</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="parent::node()"
mode="navigation-special_paint-selected">
<xsl:with-param name="node-id" select="$node-id"/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

because you have used parent::node() (which could more simply be written
as ..) rather than parent::* then if it doesn't find the $node-id it
will reach / and then (because your template only matches * not /) it
will apply the default template to / which will apply templates to its
element child, hitting this template again and looping forever.
cahanging the match to "*|/" should fix it.

As I thought immediately after hitting "send" ... a slightly neater solution.


Or apply-templates select="parent::*", as David also almost says.

Cheers,
Wendell

======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================

Current Thread