RE: [xsl] Applying for-each loop to variable that contains result tree fragment

Subject: RE: [xsl] Applying for-each loop to variable that contains result tree fragment
From: "Passin, Tom" <tpassin@xxxxxxxxxxxx>
Date: Wed, 7 May 2003 15:33:07 -0400
[Shirley Peter]
> 
> I want to use a variable as the context for a for-each
> loop. 
> 
> i.e. <xsl:for-each select="$var">
> 

It would seem that this is not really what you want to do, because your
variable (as illustrated below) would not contain  a node set but just
strings (leaving aside just now the conversion from result tree
fragement to node set).

> However the content of this variable is dependent on
> some conditions, and therefore the body of the
> variable is used.
> 
> e.g. 
> <xsl:variable name="var">
>   <xsl:if test="$otherval = '1'">
> 1</xsl:if>
>   <xsl:if test="$otherval = '2'">2</xsl:if>
> </xsl:variable
>     

>From this construction, it looks as if you want to control the number of
times you execute a for-each block.  If this is so, there are certain to
be other ways to accomplish whatever it is you really want to
accomplish.  If you explain this more, we could probably give some
useful suggestions.

As a more kludgy approach to fake what you want to do, if you have some
way to know how many nodes you want to select, you could select them
from the stylesheet, something like this

<!-- $count is a variable - a number  - you have selected for the
interation number -->
<xsl:variable name='nodes' select='document("")/xsl:stylesheet/*[$count
+ 1 > position()]'/>
<xsl:for-each select='$nodes'>
...
</xsl:for-each>

(Warning - do not use //*[$count... ] or you will not get what you
expect - left as an exercise for the reader)

You can always add some dummy nodes to the stylesheet if you need more.
But really it would be better to explain what you want to do and almost
certainly there will be a better way.

Cheers,

Tom P

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


Current Thread