Re: [xsl] Node selection based on parent attribute

Subject: Re: [xsl] Node selection based on parent attribute
From: "katharine wykes" <katharinewykes@xxxxxxxxxxx>
Date: Fri, 30 Aug 2002 16:02:14 +0000
That's really useful, thanks.

The ammended code seems to be causing Netscape 6 to crash. Can you see a problem with the xslt:

<xsl:param name="countryID" select="menu"/>

<xsl:template match="tree">
 <xsl:apply-templates select="menu[@countryID=$countryID]"/>
</xsl:template>

<xsl:template name="menu" match="menu">
<div>
<xsl:attribute name="id">ID<xsl:value-of select="@id"/></xsl:attribute>
<xsl:attribute name="STYLE">visibility:visible;padding-left: 20px;cursor: hand;
</xsl:attribute>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="middle" nowrap="true">
<xsl:attribute name="STYLE">
padding-left: 7px;font-family: Verdana;font-size: 11px;font-color: black;
</xsl:attribute>
<a>
<xsl:attribute name="href">
<xsl:text>javascript:divCheck('ID</xsl:text><xsl:value-of select="@id"/><xsl:text>')</xsl:text>
</xsl:attribute>
<xsl:value-of select="@description"/>
</a>
</td>
</tr>
</table>
<xsl:if test="count(menu) > 0">
<xsl:apply-templates select="menu"/>
</xsl:if>
</div>
</xsl:template>
</xsl:stylesheet>


I've got a recursive call in there. But when I take it out Netscape still seems to be having problems. My xml structure is:
<menu id="6" countryID="1" description="Menu6" href="">
<menu id="7" countryID="1" description="Menu7" href="">
</menu>
</menu>


Thanks in advance.
Kate
From: David Carlisle <davidc@xxxxxxxxx>
Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Node selection based on parent attribute
Date: Fri, 30 Aug 2002 15:29:16 +0100

> passing through a parameter of 1 using:

when the param is 1 control passes first to the tree template...

<xsl:template match="tree">
  <xsl:apply-templates select="menu"/>
</xsl:template>

so now the current node list is all the menu elements of tree,
so first the control passes to the menu template, with the current node
being the first menu (which has id=1).

<xsl:template match="menu">
   <xsl:for-each select="menu[@id=$id]/menu">
         <xsl:value-of select="@id"/>
    </xsl:for-each>
</xsl:template>

This selects all the menu children of the current node which have id=1.

there are no such children so nothing is returned.





i think that what you want might be

<xsl:template match="tree">
  <xsl:apply-templates select="menu[@id=$id]/menu"/>
</xsl:template>

<xsl:template match="menu">
         <xsl:value-of select="@id"/>
</xsl:template>

David

_____________________________________________________________________
This message has been checked for all known viruses by Star Internet
delivered through the MessageLabs Virus Scanning Service. For further
information visit http://www.star.net.uk/stats.asp or alternatively call
Star Internet for details on the Virus Scanning Service.

XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list




_________________________________________________________________
Join the world?s largest e-mail service with MSN Hotmail. http://www.hotmail.com



XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list



Current Thread