RE: [xsl] Problem setting variable in if statement

Subject: RE: [xsl] Problem setting variable in if statement
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Mon, 2 Feb 2004 20:23:33 -0000
> I am very new to xsl/xslt and have a basic problem.  I am 
> setting a style sheet color based on a condition. I'd like 
> the color to be a variable value, like <xsl:variable 
> name="statColor" select="#33cc33"> and set this variable in 
> the if/choose condtion. Then recall it like <span 
> style="color:{$statColor}"><xsl:value-of select="status"></span>
> I have it like this now, but want to simplfiy it:
>  <xsl:choose>
>         <xsl:when test="status='undelivered'"> <span 
> style="color:#ff0000">  <xsl:value-of 
> select="status"/></span> </xsl:when>
>         <xsl:when test="status='inprogress'"> <span 
> style="color:#33cc33">  <xsl:value-of 
> select="status"/></span> </xsl:when>
>         <xsl:when test="status='delivered'">  <span 
> style="color:#33cc33">  <xsl:value-of 
> select="status"/></span> </xsl:when>
>         <xsl:when test="status='escalated'">  <span 
> style="color:#33cc33">  <xsl:value-of 
> select="status"/></span> </xsl:when>
>         <xsl:otherwise> <span style="color:#000000">  
> <xsl:value-of select="status"/></span></xsl:otherwise>
>       </xsl:choose>

In 2.0 you can write

<xsl:variable name="p" select="index-of(('undelivered', 'inprogress',
'delivered', 'escalated'), status)"/>
<span style="color:{('#ff0000', '#33cc33', '#33cc33', '#33cc33')[$p]}"/>

One way I sometimes do it in 1.0 is:

<xsl:template match="status[.='undelivered']"
<xsl:template match="status[.='inprogress']"
<xsl:template match="status[.='delivered']"
<xsl:template match="status[.='escalated']"

  <xsl:attribute name="style">
    <xsl:apply-templates select="status" mode="color"/>

Michael Kay

 XSL-List info and archive:

Current Thread