Xml 在XSLT中,true()和true之间有什么区别?

Xml 在XSLT中,true()和true之间有什么区别?,xml,xslt,boolean,xslt-1.0,xslt-2.0,Xml,Xslt,Boolean,Xslt 1.0,Xslt 2.0,我想了解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="$va

我想了解
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>

你好,世界

由于您使用布尔表达式定义了变量,因此:

<xsl:if test="$var1=true()"> 
可以在XSLT1.0中使用(并且可以在任何非空字符串中使用),但不能在XSLT2.0中使用

还请注意:

string(var1)
将返回“true”或“false”,因此测试:

<xsl:if test="$var1='true'">
<xsl:if test="string($var1)='true'">


在XSLT 1.0和2.0中,编写类似于
的东西是一个常见的错误(我在XQuery中比在XSLT中看到的更多)。这里表达式
true
的意思是
child::true
,除非源文档中有名为
true
的元素,否则很可能会选择一个空序列,在布尔上下文中将其视为
false()


如果您像这样使用名称“true”,Saxon的最新版本会给您一个警告,如果您确实希望访问具有此名称的元素,请将其编写为
child::true
/true

true()
是一个返回布尔值true的函数,而
true
只需选择一个名为true(/root/name/true/child)的节点即可,谢谢@sergioFC。因此,在if条件下,我应该使用true()。我看到了同样使用true的代码,所以有点困惑。@user502808
<xsl:if test="string($var1)='true'">