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

时间:2015-08-14 20:54:38

标签: 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="$var1=true() "> <!-- Now would I use true() or true here ?-->
    <xsl:text>Hello World</xsl:text>
</xsl:if>

2 个答案:

答案 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