RE: [xsl] simulating for with foreach

Subject: RE: [xsl] simulating for with foreach
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 5 Jul 2006 10:27:51 +0100
You're not making your requirements very clear. 

If you have the sequence of positions as input (in XSLT 1.0 this would have
to be in a node-set, e.g.

<xsl:variable name="positions">
  <p>1</p>
  <p>5</p>
  <p>6</p>
</xsl:variable>

then you can process the nodes at those positions using

<xsl:variable name="nodes" select="nodes"/>

<xsl:for-each select="$positions/p">
  <xsl:variable name="pos" select="number(.)"/>
  <xsl:apply-templates select="$nodes/node[$pos]"/>
</xsl:for-each>

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

> -----Original Message-----
> From: Mohsen Saboorian [mailto:mohsens@xxxxxxxxx] 
> Sent: 05 July 2006 10:19
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] simulating for with foreach
> 
> Hi,
> I would like to know if it is possible to iterate over a set 
> of elements (say node in this example) in a special way (not 
> every element, but 1, 3, 5, ... or any other sequence). (XSLT 
> 1) <nodes>
>   <node />
>   <node />
>   <node />
>   <node />
> </nodes>
> I know that one way is to <xsl:iterate> and use <xsl:if> and 
> position(), but there are situations in which you can not use
> position() because it doesn't give you the exact node (for 
> example when you have #text elements randomly beside <node>.
> 
> Thanks.

Current Thread