[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] 'xsl:variable' as dynamic select for 'xsl:for-each'...


Subject: RE: [xsl] 'xsl:variable' as dynamic select for 'xsl:for-each'...
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Mon, 17 Nov 2003 13:41:46 -0000

> 
> My problem is that the select statement of the variable needs to be 
> dynamic. Such as... (and I know this doesn't work.. )
> 
>    <xsl:choose>
>      <xsl:when test="$clientid = ''">
>         <xsl:variable name="selectclause" select = "//client"/>
>      </xsl:when>
>      <xsl:otherwise>
>        <xsl:variable name="selectclause" select = 
> "//client[$clientid]"/>
>      </xsl:otherwise>
>    </xsl:choose>
> 

This is a bit tricky in XSLT 1.0. The usual recommendation for creating
a node-set conditinoally is:

<xsl:variable name="selectclause" select="(//client)[$clientid=''] |
(//client[$clientid!=''])"/>

or more generically

   select = then-part[condition] | else-part[not(condition)] 

In XSLT 2.0 of course you can do

   select="if (condition) then expr-1 else expr-2"

Michael Kay


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



Current Thread
Keywords