“选择何时”使用变量XSLT

时间:2014-01-16 04:35:58

标签: xml xslt

我想根据浮点值设置表格的颜色..

....
<xsl:variable name="percent">
<xsl:value-of select="float(PercentageValue)" />
</xsl:variable>
<xsl:variable name="color">
<xsl:choose>
<xsl:when test="$PercentageValue &ge; 75.0">green</xsl:when>
<xsl:when test="$PercentageValue &lt; 75.0 and $PercentageValue &ge; 50.0">orange</xsl:when>
<xsl:otherwise>red</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<tr bgcolor="$color">
....

我想要的是......

if(percent>=75)
tableRowColor=green;
else if(percent>=50.0 && percent <75.0)
tableRowColor=orange;
else
tableRowColor=red;

我相对较新的XSLT语法..上面的问题是什么? 帮助赞赏!

编辑1:对于变量为$ PercentageValue的复制粘贴,请输入拼写错误 这就是我现在所做的..

....
<xsl:variable name="PercentageValue">
        <xsl:value-of select="number(percent)" />
    </xsl:variable>
    <xsl:variable name="color">
        <xsl:choose>
            <xsl:when test="$PercentageValue &gt;= 75.0">green</xsl:when>
            <xsl:when test="$PercentageValue &lt; 75.0 and $PercentageValue &gt;= 50.0">orange</xsl:when>
            <xsl:otherwise>red</xsl:otherwise>
        </xsl:choose>
    </xsl:variable>
<tr bgcolor="$color">
.....

现在我确实得到了颜色,但都是黑色..为什么呢?

以下是我如何展示 Without using any bgcolor attribute for tr 百分比值在最后..在td中为该tr选择,因此它会显示.. 实际上整个xml和xsl是通过java动态生成的,因此那里有很多精度(double)。那会导致问题吗?

1 个答案:

答案 0 :(得分:4)

有几个问题:

  • 您的变量已指定为percent,但您引用了$PercentageValue
  • 使用number()函数
  • 转换数字
  • 并使用gt;=lt;进行比较

试试这个:

<xsl:template match="/xml">
    <xsl:variable name="PercentageValue">
        <xsl:value-of select="number(PercentageValue)" />
    </xsl:variable>
    <xsl:variable name="color">
        <xsl:choose>
            <xsl:when test="$PercentageValue &gt;= 75.0">green</xsl:when>
            <xsl:when test="$PercentageValue &lt; 75.0 and $PercentageValue &gt;= 50.0">orange</xsl:when>
            <xsl:otherwise>red</xsl:otherwise>
        </xsl:choose>
    </xsl:variable>
    <TheColorIs>
        <xsl:value-of select="$color"/>
    </TheColorIs>
</xsl:template>

关于这个Xml:

<xml>
    <PercentageValue>77</PercentageValue>
</xml>

顺便说一句,请记住您还可以使用模板过滤来应用匹配,而不是使用xsl:ifxsl:choose / xsl:when创建大量变量和命令式“切换”,

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/xml/PercentageValue[number() &gt;= 75]">
        <color>green</color>
    </xsl:template>

    <xsl:template match="/xml/PercentageValue[number() &lt; 75.0 and number() &gt;= 50.0]">
        <color>orange</color>
    </xsl:template>

</xsl:stylesheet>