代码之家  ›  专栏  ›  技术社区  ›  aefxx

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

  •  1
  • aefxx  · 技术社区  · 14 年前

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

    我想知道是否有一种方法可以在不使用临时变量的情况下实现这一点?

    下面是一些示例代码:

    <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)"/> 但没用。

    任何帮助都非常感谢。 短暂性脑缺血发作

    2 回复  |  直到 14 年前
        1
  •  1
  •   user357812user357812    14 年前

    第一, $tmp 数据类型是结果树片段。所以,除了复制,在所有允许的操作中 $tmp公司 ,只计算其字符串值。

    XPath有许多隐式转换规则。一般来说,每当运算符或函数采用数字数据类型作为参数时,表达式将转换为 number() 功能。

    一句话:在大多数情况下,你不需要显式的铸造。

        2
  •  1
  •   Dimitre Novatchev    14 年前

    正如@Alejandro所指出的,您不需要显式强制转换为数字 .

    如果不打算将其用作数字,而是将数字表示用作中间类型,则确实需要转换,因为 $tmp 变量不能按需要直接转换为该类型。

    例子 :

    你需要:

      boolean(number($tmp))
    

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

    boolean(someNode)
    

    总是 true() -- by definition .