如何创建布尔值?

时间:2008-12-06 12:34:41

标签: xml xslt boolean

我是XSLT的新手,无法解决以下代码出错的问题。

<xsl:variable name="var" select="boolean('false')"/>

<xsl:if test="$var'">variable is true</xsl:if>

当意图是虚假时,它总是返回true。为什么呢?

3 个答案:

答案 0 :(得分:164)

$ var变量的值,如:

中所定义

<xsl:variable name="var" select="boolean('false')"/>

<强> true()

这是因为在XPath中“false”是一个普通字符串,而不是false(),它是booleanfalse()的构造函数

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()"/>

答案 1 :(得分:17)

你正在使用的boolean()函数确实在做它的工作。要使用显式的true和false值,您应该使用以下函数:

<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>

只是FYI,根据MSDN documentation,boolean()返回以下内容:

  • 如果参数为负数或正数,则将其转换为布尔值true。
  • 如果参数为零或NaN值,则将其转换为false。
  • 如果参数是非空节点集,则将其转换为true。空节点集将转换为false。
  • 如果参数是非空字符串,则转换为true 。空字符串将转换为false。
  • 如果参数是四种基本类型以外的类型的对象,则它将以依赖于该类型的方式转换为布尔值。

答案 2 :(得分:5)

在这个阶段可能有点晚了,但imo处理布尔值是不值得的。下面是我如何处理从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>

希望这有助于某人