RE: [xsl] Assigning value to variable based on xsl:choose test

Subject: RE: [xsl] Assigning value to variable based on xsl:choose test
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 24 Jul 2006 10:08:54 +0100
This is a FAQ. The problem with your code is that instead of creating one
variable with two possible values, it creates two different variables, and
of course they both go out of scope. The solution is

<xsl:variable name="X">
  <xsl:choose>
    <xsl:when test="....">8</xsl:when>
    <xsl:when test="....">4</xsl:when>
  </xsl:choose>
</xsl:variable>

In XSLT 2.0 you can also write

<xsl:variable name="X" select="if (...) then 8 else 4"/>

I've no idea where xsl:attribute might come into the picture, but perhaps
that's best not asked. xsl:attribute is an instruction that creates
attribute nodes in the result tree.

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

 

> -----Original Message-----
> From: David Murphy [mailto:david@xxxxxxxxxxxxxx] 
> Sent: 24 July 2006 10:08
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Assigning value to variable based on xsl:choose test
> 
> Hello
> 
> Is it possible to set the value of a variable based upon a test?
> 
> My first effort is below, and I also tried to assign the 
> value to the variable using xsl:attribute but that doesn't 
> work either.
> 
> <xsl:choose>
> 	<xsl:when test="price_type = 56"><xsl:variable name="numTickets"
> select="8"/></xsl:when>
> 	<xsl:when test="price_type = 57"><xsl:variable name="numTickets"
> select="4"/></xsl:when>
> 	<xsl:otherwise><xsl:variable name="numTickets"
> select="9"/></xsl:otherwise>
> </xsl:choose>
> 
> ...
> 
> <xsl:call-template name="counter">
>       <xsl:with-param name="max" select="$numTickets"/> 
> </xsl:call-template>
> 
> 
> I'm guessing that one cannot assign values to variables 
> inline like this, but I've not managed to get it working so a 
> bit of guidance that will help me work this out would be much 
> appreciated.
> 
> Regards, David

Current Thread