Bri*_*son 6 xml xslt xpath boolean
为什么
<xsl:if test="<XPATH to boolean value here>">
...
</xsl:if>
Run Code Online (Sandbox Code Playgroud)
总是回归真实?
由于boolean在定义时可以是0,1,"false"和"true",因此测试布尔值的唯一方法是对这些进行字符串比较.这不可能是对的.
该test规定<xsl:if>的作品,如果它被称为boolean功能.此功能不会像您想象的那样工作.如果它的参数求值为一个节点集(如果你使用一个路径作为它的参数,它将是它),如果节点集不为空,它将返回true,否则返回false.如此有效,你正在测试一个元素的存在,而不是它的价值.如果foo包含false,
<xsl:if test="/path/to/foo">
Run Code Online (Sandbox Code Playgroud)
总是评估为真,因为你在那个测试中真正要求的是"这个元素是否存在?" 而不是"元素的价值是真的吗?" 元素存在.
该规则布尔值必须是true,false,1或者0是XML模式(的一部分,它看到),而不是XPath,它不知道这个规则另有规定.(XPath 1.0,即XPath 2.0/XQuery 1.0具有该fn:boolean功能,它具有智能,即XML Schema感知,对布尔值的评估.)要确定XSLT中的值是否为真,您必须明确检查它:
<xsl:if test="/path/to/foo = 'true' or /path/to/foo = '1'">
Run Code Online (Sandbox Code Playgroud)