RE: [xsl] predicate inside a for-each

Subject: RE: [xsl] predicate inside a for-each
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sun, 1 Jan 2006 17:44:25 -0000
Do

<xsl:for-each select="head/row">
  <xsl:variable name="ROWPOSITION" select="position()"/>

then subsequently use $ROWPOSITION

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

> -----Original Message-----
> From: yaXay [mailto:yaXay@xxxxxxx] 
> Sent: 01 January 2006 15:51
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] predicate inside a for-each
> 
> Hi,
> 
> imagine the following scenario:
> 
> XML:
> <table>
>     <head>
>         <row>row 1</row>
>         <row>row 2</row>
>     </head>
>     <body>
>         <field>field 1</field>
>         <field>field 2</field>
>         <field>field 3</field>
>         <field>field 4</field>
>     </body>
> </table>
> 
> I would like to generate a XHTML table looking (a bit) like this:
> row 1        field 1      field3
> row 2        field 2      field4
> 
> However, I ran into a brick wall:
> <xsl:template match="table">
>     <table>
>         <xsl:for-each select="head/row">
>             <tr>
>                 <td><strong><xsl:value-of select="."/></strong></td>
>                 <xsl:for-each select="../../body/field[position() mod 
> count(../../head/row) = ROWPOSITION]">
>                     <td><xsl:value-of 
> select="position()"/>-<xsl:value-of select="../../@row-count"/></td>
>                 </xsl:for-each>
>             </tr>
>         </xsl:for-each>
>     </table>
> </xsl:template>
> 
> ROWPOSITION needs to be the position of the row, which is 
> processed by 
> the outer for-each. However, I can't think of any XPath expression to 
> get there..
> Of course I could call another template and pass the row 
> position as a 
> parameter, but I'd like to avoid that..
> 
> Any suggestions??
> 
> Thanks,
> Ben

Current Thread