RE: [xsl] Trouble selecting nodes form a nodeset

Subject: RE: [xsl] Trouble selecting nodes form a nodeset
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 7 Jun 2007 23:39:48 +0100
> I would expect to see the output from the template match of 
> <xsl:template match="member" mode="alt"> (below) but don't find it.

$nodelist/member selects the member children of all elements in $nodelist.
Some of the nodes in $nodelist are member elements, but none of them has a
child named member.

You want $nodelist[self::member] (or $nodelist/self::member if you prefer)

Michael Kay
http://www.saxonica.com/

> 
> Any ideas?  Thanks...
> --jah
> 
> == test.xml ==
> <group>
>   <member name="member one">
>     <element name="element one dot one" />
>     <element name="element one dot two" />
>   </member>
>   <member name="member two">
>     <element name="element two dot one" />
>     <element name="element two dot two" />
>   </member>
> </group>
> 
> == test.xsl ==
> <xsl:stylesheet version="2.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>   <xsl:output method="text" />
> 
>   
> <!--===============================================================-->
>   <xsl:template match="/">
>     <xsl:variable name="nodelist" select="group/member | 
> group/member/element " />
>     <xsl:apply-templates select="$nodelist" />
> 
>     <xsl:apply-templates select="$nodelist/member" mode="alt" />
>     <xsl:apply-templates select="$nodelist/element" mode="alt" />
>   </xsl:template>
> 
>   
> <!--===============================================================-->
>   <xsl:template match="member">
>     <xsl:value-of select="name()" />
>     <xsl:text> = </xsl:text>
>     <xsl:value-of select="@name" />
>     <xsl:text>
> </xsl:text>
>   </xsl:template>
> 
>   
> <!--===============================================================-->
>   <xsl:template match="element">
>     <xsl:text>  </xsl:text>
>     <xsl:value-of select="name()" />
>     <xsl:text> = </xsl:text>
>     <xsl:value-of select="@name" />
>     <xsl:text>
> </xsl:text>
>   </xsl:template>
> 
>   
> <!--===============================================================-->
>   <xsl:template match="member" mode="alt">
>     <xsl:text>MEMBER: </xsl:text>
>     <xsl:value-of select="@name" />
>     <xsl:text>
> </xsl:text>
>   </xsl:template>
> 
>   
> <!--===============================================================-->
>   <xsl:template match="element" mode="alt">
>     <xsl:text>ELEMENT: </xsl:text>
>     <xsl:value-of select="@name" />
>     <xsl:text>
> </xsl:text>
>   </xsl:template>
> 
> </xsl:stylesheet>

Current Thread