为什么
<xsl:if test="<XPATH to boolean value here>">
...
</xsl:if>
总是回归真的吗?
由于boolean可以是0,1,“false”和“true”,因此测试布尔值的唯一方法是对这些进行字符串比较。这可能不对。
答案 0 :(得分:9)
test
中指定的<xsl:if>
就像调用boolean
函数一样。此功能不会像您想象的那样工作。如果它的参数求值为一个节点集(如果你使用一个路径作为它的参数,它将是它),如果节点集不为空,它将返回true,否则返回false。如此有效,你正在测试一个元素的存在,而不是它的价值。如果foo
包含false
,
<xsl:if test="/path/to/foo">
将始终评估为true,因为您在该测试中真正要求的是“这个元素是否存在?”而不是“元素的价值是真的吗?”元素存在。
布尔值必须为true
,false
,1
或0
的规则是XML架构(which see)的一部分,而不是XPath ,对这条规则一无所知。 (XPath 1.0,即XPath 2.0 / XQuery 1.0具有the fn:boolean
function,它具有智能,即XML Schema感知,对布尔值的评估。)要确定XSLT中的值是否为真,您必须明确检查它:
<xsl:if test="/path/to/foo = 'true' or /path/to/foo = '1'">
答案 1 :(得分:0)
答案 2 :(得分:0)
xpath规范给出了一个布尔函数。因此,boolean(Value)将始终返回true或false。