xsl-list
[Top] [All Lists]

RE: Problem setting variable in if statement

2004-02-02 13:12:41
You haven't supplied enough context to help you. Your fragment of a template is 
fine so far as we can see it, so the problem must be coming from a larger 
context that contains it.

Generally speaking, variables are one of the most confusing aspects of XSLT to 
people accustomed to standard, imperative programming languages. Assuming that 
the <xsl:choose> appears in a context that is repeated (inside a <xsl:for-each> 
construct or inside a template that is called repeatedly), you could simplify 
your code like this:

<xsl:variable name="status-color">
  <xsl:when test="status='undelivered'">#ff0000</xsl:when>
  <xsl:when test="status='inprogress'">#33cc33</xsl:when>
  <xsl:when test="status=delivered">#0033ff</xsl:when>
  <xsl:when test="status='escalated'">#ffff33</xsl:when>
  <xsl:otherwise>000000</xsl:otherwise>
</xsl:variable>

<span style="color:{$status-color}">
  <xsl:value-of sect="status"/>
</span>

The reason that a repetition is important is that once a variable is bound to a 
value in a context, it cannot be changed. Every repetition of a template or a 
for-each is a new context. In effect, the variable is a new variable each time. 
The value is not re-assigned, instead the variable is re-created.
-- 
Charles Knell
cknell(_at_)onebox(_dot_)com - email



-----Original Message-----
From:     Johnson, Kaerstin <johns218(_at_)regis(_dot_)edu>
Sent:     Mon, 2 Feb 2004 12:02:31 -0700 (MST)
To:       XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject:  [xsl] Problem setting variable in if statement


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:#0033ff">
 <xsl:value-of select="status"/></span> </xsl:when>
        <xsl:when test="status='escalated'">  <span style="color:#ffff33">
 <xsl:value-of select="status"/></span> </xsl:when>
        <xsl:otherwise> <span style="color:#000000">  <xsl:value-of
select="status"/></span></xsl:otherwise>
      </xsl:choose>

I cant seem to get it to work.




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



<Prev in Thread] Current Thread [Next in Thread>