我想了解true()
和true
之间的区别以及两者的用法。
例如:
我声明变量var1
如下:
<xsl:variable name="var1"
select="/root/name ='' and exists(/root/name[@as:firstname])"></xsl:variable>
<!--and now I wan to use it as a condition, say:-->
<xsl:if test="$var1=true() "> <!-- Now would I use true() or true here ?-->
<xsl:text>Hello World</xsl:text>
</xsl:if>
答案 0 :(得分:4)
由于您已使用布尔表达式定义变量,因此:
<xsl:if test="$var1=true()">
和
<xsl:if test="$var1">
将以同样的方式工作。不确定true
的意思;它可以是一个节点,也可以是一个字符串“true”。在后一种情况下,测试:
<xsl:if test="$var1='true'">
可以在XSLT 1.0中运行(并且它可以与任何非空字符串一起使用),但不适用于XSLT 2.0。
另请注意:
string(var1)
将返回“true”或“false”,因此测试:
<xsl:if test="string($var1)='true'">
在XSLT 1.0和2.0中,将以您期望的方式工作
答案 1 :(得分:2)
写<xsl:with-param name="married" select="true"/>
之类的东西是一个常见的错误(我在XQuery中比在XSLT中更常见)。此处表达式true
表示child::true
,除非您的源文档中实际包含名为true
的元素,否则它可能会选择一个空序列,该序列将被视为{ {1}}在布尔上下文中。
最新版本的Saxon会在您使用名称&#34; true&#34;像这样,如果您真的想要访问具有此名称的元素,请邀请您将其写为false()
或child::true
。