This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: variable with node in xsl:choose


Hi Markus,

> I want to use a variable in a for:each... so it works fine:
> 
> <xsl:variable name="anzrows" select="//user/nokeyuser/name"/>
> <xsl:for-each select="$anzrows">
> 
> But I want the select in the variable choosen by a condition like this:
> 
> <xsl:choose>
>    <xsl:when test="$anznokeyuser > $anzkeyuser"><xsl:variable name="anzrows"
> select="//user/nokeyuser/name"/></xsl:when>
>    <xsl:otherwise><xsl:variable name="anzrows"
> select="//user/keyuser/name"/></xsl:otherwise>
> </xsl:choose>

You have to use a bit of a trick to get this to work. You want to get
the //user/nokeyuser/name element(s) if $anznokeyuser is more than
$anzkeyuser, and //user/keyuser/name otherwise. The best way to do
this is to create a union of the //user/nokeyuser/name (if
$anznokeyuser > $anzkeyuser):

  (//user/nokeyuser/name)[$anznokeyuser > $anzkeyuser]

and //user/nokeyuser/name (if $anznokeyuser <= $anzkeyuser):

  (//user/keyuser/name)[not($anznokeyuser > $anzkeyuser)]

So use:

  <xsl:variable name="anzrows"
    select="(//user/nokeyuser/name)[$anznokeyuser > $anzkeyuser] |
            (//user/keyuser/name)[not($anznokeyuser > $anzkeyuser)]"/>
  <xsl:for-each select="$anzrows">
    ...
  </xsl:for-each>
            
Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]