xslt:if如何测试布尔值

时间:2010-01-13 20:33:36

标签: xslt

我无法找到检查元素值是“true”还是“false”的方法。

它是布尔值,从数据集转换而来。当我选择值时,我看到它是“true”或“false”,但我的测试没有得到预期的行为。 (它总是假的。)我几乎尝试了所有东西,这是我的第一个xslt应用程序,所以请帮助。

      <xsl:if test="ispassive">
        <tr>
          <td>
            <em>pasif değil</em>
            <hr></hr>
          </td>
        </tr>
      </xsl:if>

3 个答案:

答案 0 :(得分:18)

在这里发帖后,我意识到了这一点 我的<xsl:if>测试超出了我的<xsl:for-each>循环。

重新定位<xsl:if>条件后,我发现这对我有用。

        <xsl:if test="ispassive='true'">
          <tr>
            <td>
              <em>pasif</em>
              <hr></hr>
            </td>
          </tr>
        </xsl:if>

ispassive元素的计算字符串值与'true'进行比较工作正常,(我之前尝试过,但因为我在xslt中放错了位置,所以它总是失败,因为它无法选择{ {1}}元素来评估它的价值。

答案 1 :(得分:13)

根据您代表布尔值的方式,这可能是很多事情,您的数据是什么样的?

最有可能的情况是,false表示为0,true表示任何非0值。

<xsl:if test="$myvalue = 0">
    -- output if false --
</xsl:if>

但您最好使用xsl:choose

<xsl:choose>
    <xsl:when test="$myvalue = 0">
        -- output if false --
    </xsl:when>
    <xsl:otherwise>
        -- output if true --
    </xsl:otherwise>
</xsl:choose>

如果你不需要,你可以忽略它。

答案 2 :(得分:10)

此xslt正在当前上下文中查找名为ispassive的节点。

所以如果你的xml是

<Root>
   <ispassive />
</Root>

你会成真的。通常,您应指定要检查的值的xpath。所以如果你的xml是

<Root>
      <Node ispassive="true"/>
</Root>

并替换

<xsl:if test="ispassive">

<xsl:if test="//@ispassive = 'true'">

您的样式表将按预期工作。