我對XSLT完全陌生,無法解決以下代碼出錯的地方。如何創建一個布爾值?
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
當它是假的時候它總是返回true。爲什麼?
我對XSLT完全陌生,無法解決以下代碼出錯的地方。如何創建一個布爾值?
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
當它是假的時候它總是返回true。爲什麼?
的是$ var變量的值中定義:
<xsl:variable name="var" select="boolean('false')"/>
是
true()
這是因爲... E在XPath的「false
」是一個普通的字符串,而不是false()
,這對於boolean
值false()
兩人的XPath布爾值構造函數(注意,它們構造!):
true()
和false()
的便利着想的細節將任何值設置爲布爾值在XPath Spec中拼寫。:
「的boolean函數將其參數轉換爲布爾如下:當且僅當它 既不是正或負零 也不爲NaN
一個
一個數字是真節點集是真的當且僅當它 是非空的
一個字符串是真的當且僅當它的 長度爲非零
比四種基本類型以外的類型的對象被轉換成布爾的方式,依賴於該類型 「
在你的情況下,字符串「false」不是數字0並且長度爲正數,所以應用上面第3條中的規則,產生true()
。
因此,在XSLT 1.0,其值是false()
,需要編寫的定義定義一個變量爲如下:
<xsl:variable name="vMyVar" select="false()"/>
,或者,如果不這樣做請記住,你總是可以這樣寫:
<xsl:variable name="vMyVar" select="1 = 0"/>
(指定任何評估爲false()
的表達式),XSLT處理器將爲您完成這項工作。
在XSLT 2.0總是最好明確指定變量的類型:
<xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>
你正在使用的boolean()函數確實在做它的工作。對於使用明確的真假值,你應該使用下列功能:
<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>
僅供參考,每MSDN documentation,布爾()返回如下:
您應該重新格式化列表中的倒數第二個項目以突出更多,因爲它是關鍵之一。 「布爾('')」也會產生錯誤。 – Tomalak 2008-12-06 15:16:23
在這一階段後期有一點也許是,但伊莫處理布爾值是不值得努力。繼承人我如何處理一個布爾值(強制性)從DB回來:
<xsl:variable name="vTrue" select="true()"/>
<xsl:choose>
<xsl:when test="string(Mandatory) = string($vTrue)">
<xsl:text>Mandatory</xsl:text>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
希望這可以幫助別人
只是一個建議,但你可能會得到答案的一個更好的口徑,如果你寫你的標題一個適當的問題並避免說話。 – 2008-12-06 12:38:43
謝謝你們,對不起。 – sydlawrence 2008-12-09 07:15:41