RE: Looking up elements with {@attname}

Subject: RE: Looking up elements with {@attname}
From: Kay Michael <Michael.Kay@xxxxxxx>
Date: Mon, 24 May 1999 09:54:55 +0100
> Klaas Bals [mailto:kbals@xxxxxxxxxxx] asked:
>I'll try to give a simplified example:
> 
> <element att2="same-value" att3="firstvalue"/>
> <element att2="same-value" att3="secondvalue"/>
> 
> <xsl:stylesheet>
>     <xsl:template match="element">
>         <xsl:value-of select="@att3"/>
>         <xsl:text> found </xsl:text>
>         <xsl:value-of select="//element[@att2={./@att2}]/@att3"/>
>     </xsl:template>
> </xsl:stylesheet>
> 
the curly-bracket notation can only be used in attributes that are defined
to be attribute-value-templates; the select attribute of xsl:value-of (and
all other attributes whose value is an expression) are not AVTs, so you
cannot use this mechanism.

Try:
>     <xsl:template match="element">
>	    <xsl:variable name="x" expr="@att2"/>
>         <xsl:value-of select="@att3"/>
>         <xsl:text> found </xsl:text>
>         <xsl:value-of select="//element[@att2=$x][2]/@att3"/>
>     </xsl:template>

I added the [2] because in your example you're looking for the second
element in which att2 has this value: I suspect this isn't quite right but
you haven't specified the problem in enough detail for me to do any better.

Alternatively, and probably more efficiently, use keys.

Mike Kay


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


Current Thread