2010-01-13 62 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