我知道初始化后的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>
</xsl:text>
<xsl:variable name="myVar" select="'Wendelstein'" />
<xsl:value-of select="$myVar" /><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
使用此输出:
asdex upgrade
Wendelstein
那么这里发生了什么?显然,这段代码与XSLT中变量不可变的事实并不矛盾,否则Saxon处理器不会处理它。我在这里创建两个具有相同名称的变量(其范围是给定模板的本地范围)?如果是这样,我是否有能力在创建第二个变量之后访问第一个变量,或者它是否已经不存在,或者它是否在XSLT处理器的符号表中被遮盖了?或者是什么给了什么?
感谢任何启蒙!
答案 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"
会影响第一个。