RE: [xsl] Select nodes with equal position

Subject: RE: [xsl] Select nodes with equal position
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sat, 2 Apr 2005 20:22:32 +0100
> depending on the postion() of a certain node I would like to select 
> another node with the same position.
> It works if I invent a variable.
> But I wonder if there is a way to do it without the use of a variable?

Not if you're using a predicate, because position() inside a predicate is
different from position() outside the predicate.

As DC said, it's much better to make your variable hold the position as a
number rather than as a text node in a result tree fragment: that is, to use
the select attribute.

In fact there's an XSLT 2.0 solution that doesn't require a predicate and
therefore doesn't require a variable:

<xsl:value-of select="../../subsequence(colspec, position(), 1)/@colname"/>

Michael Kay

> XML:
> <table>
>   <colspec colname="c1"/>
>   <colspec colname="c2"/>
>   <colspec colname="c3"/>
>   <row>
>     <entry colname="c1">r1_1</entry>
>     <entry colname="c2">r1_2</entry>
>     <entry colname="c3">r1_2</entry>
>   </row>
> </table>
> XSL:
> <xsl:template match="entry">
>   <xsl:variable name="mypos">
>     <xsl:value-of select="position()"/>
>   </xsl:variable>
>   <xsl:value-of select="../../colspec[position() = $mypos]/@colname"/>
> </xsl:template>
> Best regards and thanks for your comments,
> Norbert Heidbrink

Current Thread