Xml 测试="&引用;在布尔值上,始终返回true

Xml 测试="&引用;在布尔值上,始终返回true,xml,xslt,xpath,boolean,Xml,Xslt,Xpath,Boolean,为什么 <xsl:if test="<XPATH to boolean value here>"> ... </xsl:if> ... 总是返回真值吗 由于布尔值可以定义为0,1、“false”和“true”,因此测试布尔值的唯一方法是对这些值进行字符串比较。这不可能是对的。你可以在这里找到一大堆想法: 在中指定的测试的工作原理与调用布尔函数类似。此函数的工作方式与您可能认为的不同。如果其参数计算为节点集(如果使用路径作为其参数,则为该节点集),则如果

为什么

<xsl:if test="<XPATH to boolean value here>">
...
</xsl:if>

...
总是返回真值吗


由于布尔值可以定义为0,1、“false”和“true”,因此测试布尔值的唯一方法是对这些值进行字符串比较。这不可能是对的。

你可以在这里找到一大堆想法:


中指定的
测试
的工作原理与调用
布尔函数类似。此函数的工作方式与您可能认为的不同。如果其参数计算为节点集(如果使用路径作为其参数,则为该节点集),则如果节点集不为空,则返回true,否则返回false。因此,实际上,您是在测试元素的存在性,而不是它的值。如果
foo
包含
false

<xsl:if test="/path/to/foo">

xpath规范给出了一个布尔函数。因此,布尔值(Value)将始终返回true或false。

能否用XML片段发布当前XPath表达式?这根本不是问题。请给出一个具体的例子——XPath表达式到底是什么,计算XPath表达式的XML文件是什么(请给出最简单的XML文件)?我更愿意看一个例子,我想语法中有一个小错误。如果我读得正确,两个测试之间应该没有区别。实际上,xsl:if被指定为通过调用布尔函数来转换测试结果。更正。在上面的示例中,一旦使用模式感知处理器,您将遇到问题。由于处理器从模式中知道/path/to/foo是xs:boolean,因此它将生成一条错误消息“无法将xs:boolean与xs:string进行比较”。我确实有这个问题(带有布尔属性),但我真的不知道如何解决它。有什么帮助吗?我所知道的唯一支持模式的XSLT处理器是XSLT2.0处理器,它们支持
fn:boolean
函数。但我对他们没有任何直接的经验。
<xsl:if test="/path/to/foo = 'true' or /path/to/foo = '1'">