[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] selecting a node inside fails?


Subject: RE: [xsl] selecting a node inside <xsl:for-each> fails?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 6 Jun 2006 11:34:59 +0100

The value of "." changes inside a predicate. Use current() instead, or an
explicit variable.

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

> -----Original Message-----
> From: Rene Ladan [mailto:r.c.ladan@xxxxxxxxx] 
> Sent: 06 June 2006 10:56
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] selecting a node inside <xsl:for-each> fails?
> 
> Hi,
> 
> I'm trying to select a node which has attribute c set to '2', 
> but the selection $root//*[@c=.] (where . is an iterator over 
> the sequence ('1', '2', '3'))  returns nothing instead of node <b>.
> Changing this into $root//*[@c=string(.)] does not work either.
> 
> The 'explicit' expression and the two expressions ('outside' and
> 'direct') after the <xsl:for-each> do work.
> 
> Any ideas?
> 
> I'm using Saxon B-8.7-Java.
> 
> Regards.
> Rene
> 
> -- test-select.xml --
> 
> <a>
>   <b c="2" e="f">
>     <g/>
>   </b>
> </a>
> 
> -- test-select.xsl --
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:xs="http://www.w3.org/2001/XMLSchema">
>   <xsl:variable name="root" as="node()" select="/"/>
>   <xsl:template match="*">
>     <xsl:variable name="nums" as="xs:string*" select="'1','2','3'"/>
>     <xsl:for-each select="$nums">
>       value=<xsl:value-of select="."/>
>       <xsl:if test=".='2'">found</xsl:if>
>       <!--both [@c=.] and [@c='{.}']  and [@c=string(.)] 
> return nothing-->
>       node=<xsl:copy-of select="$root//*[@c=.]"/>
>       explicit=<xsl:copy-of select="$root//*[@c='2']"/><!--ok-->
>     </xsl:for-each>
>     outside=<xsl:copy-of select="$root//*[@c='2']"/><!--ok-->
>     direct=<xsl:copy-of select="//*[@c='2']"/><!--ok-->
>   </xsl:template>
> </xsl:stylesheet>
> 
> --
> GPG fingerprint = E738 5471 D185 7013 0EE0  4FC8 3C1D 6F83 12E1 84F6
> (subkeys.pgp.net)
> 
> "It won't fit on the line."
> 		-- me, 2001


Current Thread