带有变量 XSLT 的“选择时间”

rit*_*t93 2 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">
....
Run Code Online (Sandbox Code Playgroud)

我想要的是..

if(percent>=75)
tableRowColor=green;
else if(percent>=50.0 && percent <75.0)
tableRowColor=orange;
else
tableRowColor=red;
Run Code Online (Sandbox Code Playgroud)

我对 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">
.....
Run Code Online (Sandbox Code Playgroud)

现在我得到了颜色,但都是黑色的..为什么会这样?

这是我的显示方式 不为 tr 使用任何 bgcolor 属性 百分比值在最后 .. 在 td 中为该 tr 选择,因此它确实被显示了 .. 实际上整个 xml 和 xsl 都是通过 java 动态生成的,因此那里有很多精度(双精度)。.这会导致问题吗?

Stu*_*tLC 5

有几个问题:

  • 您的变量被分配为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>
Run Code Online (Sandbox Code Playgroud)

在这个 XML 上:

<xml>
    <PercentageValue>77</PercentageValue>
</xml>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,不要创建大量变量并使用xsl:ifor强制“切换” xsl: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>
Run Code Online (Sandbox Code Playgroud)