2010-01-13 88 views
13

我找不出一种方法来检查元素的值是“true”还是“false”。xslt:如果如何测试布尔值

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

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

ispassive是什么意思?它是一个属性的值吗?它是一个可能存在或不存在的属性? – 2010-01-13 20:36:08

+0

thx对于回复,看起来像我放错了if条件,这就是为什么 test =“ispassive ='true'”适用于我的情况。 – hazimdikenli 2010-01-13 20:50:12

+0

对未来的问题需要考虑的问题:您指的是** a ttribute **值,但实际上是评估一个**元素**,它是计算的文本值。您的描述与您的问题并不完全匹配,如果您发布了一个小例子XML和更多XSLT,那么我们可以更轻松地帮助您诊断问题。 – 2012-09-08 12:37:50

回答

11

根据你如何表示你的布尔值可能是很多事情,你的数据是什么样的?

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

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

,但你可能会更好使用的xsl:选择

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

你可以离开了,否则,如果你不需要它。

9

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

所以,如果你的XML是

<Root> 
    <ispassive /> 
</Root> 

你会得到正确的。通常,您应该指定一个xpath作为您想要检查的值。所以,如果你的XML是

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

和你

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

更换

<xsl:if test="ispassive"> 

样式表将正常工作。

16

在发布之后,我意识到 我的<xsl:if>测试在我的<xsl:for-each>循环之外。

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

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

ispassive元素的评估字符串值与“真”正常工作,(我曾经尝试过,但因为我在XSLT放错了地方,它总是失败,因为它没有选择的,ispassive元素来评估它的价值

+0

您的原始测试标准正在验证ispassive元素的存在,而不管它的价值如何。所以,只要有一个存在,它就会返回true()。通过改变测试来评估'ispassive'元素的**值**,如果值为“true”,它只返回'true()'。 – 2012-09-08 12:24:47