Xslt xsl:变量赋值澄清
我的理解是,Xslt xsl:变量赋值澄清,xslt,xsl-variable,Xslt,Xsl Variable,我的理解是,是不可变的,不能重新分配 我是XSL新手,遇到了如下示例所示的情况 <xsl:stylesheet> <xsl:variable name="temp" select="true()"/> <xsl:template name="example"> <xsl:variable name="temp" select="false()"/> <p><xsl:value-of select="
是不可变的,不能重新分配
我是XSL新手,遇到了如下示例所示的情况
<xsl:stylesheet>
<xsl:variable name="temp" select="true()"/>
<xsl:template name="example">
<xsl:variable name="temp" select="false()"/>
<p><xsl:value-of select="$temp"/></p>
</xsl:template>
</styleheet>
我还没有找到任何确切的原因,为什么会发生这种情况。我唯一能说明我没有收到错误以及为什么temp
会输出false
的原因是,有一个全局temp
变量和一个局部temp
变量(并且不知何故没有冲突)
为什么我能够“重新分配”temp
我的理解是,这是不变的,不能重新分配
这一假设是正确的。XSLT是一种语言,不可变变量在这种语言中很常见
为什么我可以“重新分配”临时工
发生的原因由术语定义。这意味着您对变量temp
的第二个定义覆盖了您的第一个定义,除非您离开它的范围,即模板。但是在这里(正如@michael.hor257k在评论中提到的),范围只能是样式表范围或模板范围-因此禁止在相同的xsl:template
-甚至在另一个代码块中重新定义变量
唯一能说明我没有收到错误以及为什么temp输出为false的方法是有一个全局temp变量和一个局部temp变量
事实上,这两个变量都是局部变量,但在另一个层面上。第一个定义在xsl:stylesheet
级别,第二个定义在xsl:template
级别。第一个可以被认为是一个全局变量,但这只是定义问题。您可以“重新分配”(更准确地说,阴影化)变量,因为第一个绑定位于样式表的顶层,而第二个绑定位于模板中
发件人:
如果绑定发生在另一个绑定可见的点,并且绑定具有相同的名称,则绑定会隐藏另一个绑定。如果模板中由xsl:variable
或xsl:param
元素建立的绑定与模板中由xsl:variable
或xsl:param
元素建立的另一个绑定相阴影,则是错误的。如果模板中由xsl:variable
或xsl:param
元素建立的绑定与由xsl:variable
或xsl:param
顶级元素建立的另一个绑定有阴影,则这不是错误
第二个是模板本地的。您并没有在真正意义上覆盖它,但实际上是使外部版本无法访问。[Fiddle](www.xmlplaydle.xyz/9Usr9c)这并不完全正确。这不仅仅是一个范围问题。不允许重写在同一模板中定义的变量,即使是在有限的范围内。