如何创build一个布尔值?
我对XSLT完全陌生,不能解决以下代码出错的地方。
<xsl:variable name="var" select="boolean('false')"/> <xsl:if test="$var'">variable is true</xsl:if>
当它被认为是虚假的时候,它总是返回真实。 为什么?
$ varvariables的值定义如下:
<xsl:variable name="var" select="boolean('false')"/>
是
true()
这是因为在XPath中,“ false
”是一个普通的string,而不是false()
,它是boolean
值的构造函数false()
XPath中的两个布尔值是 (注意它们是被构造的):
true()
和false()
将任何值转换为布尔值的细节都在XPath规范中详细说明。
“ 布尔函数将其参数转换为布尔值,如下所示:
-
一个数字是真实的,当且仅当它既不是正数,也不是零数也不是NaN
-
一个节点集是真的,当且仅当它是非空的
-
一个string只有当它的长度不为零时才为真
-
一种不同于这四种基本types的types的对象被转换为一种依赖于该types的布尔值“
在你的情况下,string“false”不是数字0,并且具有正的长度,所以应用上面第3项的规则,产生true()
。
因此,要在XSLT 1.0中定义一个值为 false()
的variables ,需要将定义写入如下:
<xsl:variable name="vMyVar" select="false()"/>
或者,如果你不记得这一点,你总是可以写:
<xsl:variable name="vMyVar" select="1 = 0"/>
(指定任何计算结果为false()
)的expression式,XSLT处理器将为您完成这项工作。
在XSLT 2.0中,最好明确指定variables的types :
<xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>
你正在使用的boolean()函数确实在做这件事。 为了使用明确的真值和假值,你应该使用下面的函数:
<xsl:variable name="var_false" select="false()"/> <xsl:variable name="var_true" select="true()"/>
只是FYI,根据MSDN文档 ,boolean()返回以下内容:
- 如果参数是负数或正数,则将其转换为布尔值true。
- 如果参数为零或NaN值,则将其转换为false。
- 如果参数是一个非空节点集,它将被转换为true。 一个空的节点集被转换为假。
- 如果参数是非空string,则将其转换为true 。 一个空string被转换为false。
- 如果参数是四种基本types以外的types的对象,则它将以依赖于该types的方式转换为布尔值。
在这个阶段可能还有点晚,但是在处理布尔运算的时候是不值得的。 下面是我如何处理从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>
希望这有助于某人