从比较XSL得到错误的答案

时间:2012-07-18 22:31:51

标签: xslt-1.0

所以我觉得这很简单,但是我可以理解它更多。

无论如何,目前我只会包含我认为相关的代码,如果有人认为更多相关内容,那么我会尝试包含更多代码。

我有两个陈述:

<xsl:value-of select="$isOnlineColumnEmpty" />
<xsl:value-of select="not($isOnlineColumnEmpty = 'false')" />

第一个输出错误。但是,第二个输出为真,这与我的期望相反。

除此之外,这两个语句多次重复,我只在一个部分得到这个结果。但是,这两个语句之间绝对没有代码,所以没有什么可以改变变量的值。

只是想知道是否有什么我可以忽略的东西?

2 个答案:

答案 0 :(得分:1)

而不是

<xsl:value-of select="not($isOnlineColumnEmpty = 'false')" />

使用

<xsl:value-of select="not($isOnlineColumnEmpty = false())" />

<强>解释

布尔值 false()字符串 "false"不同。

当布尔值与另一个值进行比较时,第二个值将转换为布尔值,然后执行比较。引用 XPath 1.0 W3C Specification

  

如果要比较的对象中至少有一个是布尔值,那么每个对象   要比较的转换为布尔值,就像应用布尔值一样   功能“。

因此,在这个具体的例子中,字符串"false"被转换为布尔值。根据定义,boolean($someString)对于任何非空字符串都是true()

因此,转换后,将比较两个布尔值false()true(),结果为false()。因为在原始表达式中,此结果是not()函数的参数,最终结果为not(false()),即true()

以下是计算链

not($isOnlineColumnEmpty = 'false') ==> not(false() = 'false') ==>

not(false() = boolean(false())) ==> not(false() = true()) ==>

not(false()) ==> true()

答案 1 :(得分:0)

所以,我稍后想出来了。

将语句更改为:

<xsl:value-of select="$isOnlineColumnEmpty != false" />

为我解决了这个问题。