xslt:if如何测试布尔值

haz*_*nli 14 xslt

我无法找到一种方法来检查元素的值是"true"还是"false".

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

      <xsl:if test="ispassive">
        <tr>
          <td>
            <em>pasif de?il</em>
            <hr></hr>
          </td>
        </tr>
      </xsl:if>
Run Code Online (Sandbox Code Playgroud)

haz*_*nli 18

在这里发帖后,我意识到我的<xsl:if>测试不在我的<xsl:for-each>循环中.

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

        <xsl:if test="ispassive='true'">
          <tr>
            <td>
              <em>pasif</em>
              <hr></hr>
            </td>
          </tr>
        </xsl:if>
Run Code Online (Sandbox Code Playgroud)

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


Kri*_*ris 13

根据你代表布尔值的方式,它可能是很多东西,你的数据是什么样的?

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

<xsl:if test="$myvalue = 0">
    -- output if false --
</xsl:if>
Run Code Online (Sandbox Code Playgroud)

但你最好使用xsl:choose

<xsl:choose>
    <xsl:when test="$myvalue = 0">
        -- output if false --
    </xsl:when>
    <xsl:otherwise>
        -- output if true --
    </xsl:otherwise>
</xsl:choose>
Run Code Online (Sandbox Code Playgroud)

如果你不需要,你可以省略.


Rob*_*tie 10

这个xslt正在寻找当前上下文中名为ispassive的节点.

所以如果你的xml是

<Root>
   <ispassive />
</Root>
Run Code Online (Sandbox Code Playgroud)

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

<Root>
      <Node ispassive="true"/>
</Root>
Run Code Online (Sandbox Code Playgroud)

你替换了

<xsl:if test="ispassive">
Run Code Online (Sandbox Code Playgroud)

<xsl:if test="//@ispassive = 'true'">
Run Code Online (Sandbox Code Playgroud)

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