xsl:call-template:返回一个数字而不是要分配给变量的文本

时间:2010-11-16 13:23:55

标签: templates xslt return-value variable-assignment

我这里有一个(小)问题。我正在调用一个命名模板,并将结果分配给变量。所以很好,但我需要处理模板的返回值的类型是整数而不是文本。

我想知道是否有办法实现这一目标而不必使用临时变量?

以下是一些示例代码:

<xsl:variable name="tmp">
    <xsl:call-template name="mytemplate">
        <xsl:with-param name="x" select="123"/>
    </xsl:call-template>
</xsl:variable>

<xsl:variable name="myvar" select="number($tmp)"/>

<xsl:template name="mytemplate">
    <xsl:param name="x"/>
    <xsl:value-of select="$x"/>
</xsl:template>

不要介意代码,因为它过分简化了我的模板。另请注意,我试图返回<xsl:value-of select="number($x)"/>,但无济于事。

非常感谢任何帮助。 TIA

2 个答案:

答案 0 :(得分:1)

首先,$tmp数据类型是结果树片段。因此,除了复制之外,在$tmp的所有允许操作中,只计算其字符串值。

XPath有许多隐式转换规则。通常,只要运算符或函数将数字数据类型作为参数,表达式就会转换为带有number()函数的数字。

底线:在大多数情况下,你不需要那种明确的演员。

答案 1 :(得分:1)

正如@Alejandro指出的那样,您不需要显式转换为数字

如果您打算不将它用作数字,而是使用数字表示作为中间类型,那么您确实需要强制转换,因为$tmp变量中的RTF可能不是直接的可以根据需要转换为该类型。

示例

你需要:

  boolean(number($tmp))

将RTF或任何树转换为布尔值可以有两个不同的值。

boolean(someNode)

总是true() - by definition