如何创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> 

希望这有助于某人