在同一范围内声明同名的多个XSLT变量

时间:2016-06-22 10:33:29

标签: xslt

我知道初始化后的XSLT变量不能改变它们各自的值 Saxon-PE 9.2.0.6允许使用以下语法:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="text" />
    <xsl:template match="/">
        <xsl:variable name="myVar" select="'asdex upgrade'" />
        <xsl:value-of select="$myVar" /><xsl:text>&#xA;</xsl:text>
        <xsl:variable name="myVar" select="'Wendelstein'" />
        <xsl:value-of select="$myVar" /><xsl:text>&#xA;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

使用此输出:

asdex upgrade
Wendelstein

那么这里发生了什么?显然,这段代码与XSLT中变量不可变的事实并不矛盾,否则Saxon处理器不会处理它。我在这里创建两个具有相同名称的变量(其范围是给定模板的本地范围)?如果是这样,我是否有能力在创建第二个变量之后访问第一个变量,或者它是否已经不存在,或者它是否在XSLT处理器的符号表中被遮盖了?或者是什么给了什么?

感谢任何启蒙!

1 个答案:

答案 0 :(得分:2)

有关详细信息,请参阅https://www.w3.org/TR/xslt20/#scope-of-variables,它解释了

  

对于任何变量绑定元素,都有一个区域(更多   具体来说,样式表的一组元素节点)   绑定是可见的。范围内的变量绑定集   XPath表达式包含那些在可见的绑定   指向表达式所在的样式表中的点。

  

对于所有后续兄弟姐妹,可以看到局部变量绑定元素   和他们的后代,有两个例外:它在任何一个都不可见   被另一个变量绑定阴影的区域,而不是   在以xsl:fallback指令为根的子树中可见   是变量绑定元素的兄弟。绑定不是   对于xsl:variable或xsl:param元素本身可见。

     

[定义:如果发生绑定,绑定会影响另一个绑定   在另一个绑定可见的点,绑定有   同名。如果由a建立绑定,则不是错误   local xsl:variable或xsl:param会影响全局绑定。在这   例如,全局绑定将不会在该区域中可见   样式表,它被另一个绑定所遮蔽。

所以第二个xsl:variable name="myVar"会影响第一个。