xsl:variable可以在同一范围内使用相同的名称定义两次。 对于类似以下的代码:
<xsl:template match="\">
<table>
<tr><td>
<xsl:variable name="status" select="normal"/>
</td></tr>
<tr><td>
<xsl:variable name="status" select="failed"/>
</td></tr>
</table>
</xsl:template>
也许这取决于浏览的类型。标准是什么?
答案 0 :(得分:4)
首先,两个变量永远不会有相同的范围。即使它们都是全局的,变量的范围也会排除它自己的select表达式,因此两个变量的范围是不同的。
其次,在您的示例中,两个变量的范围甚至不重叠。每个变量都限制在自己的td
元素中。
对于两个全局变量,规则是您可以使用两个具有相同名称的变量,前提是它们具有不同的导入优先级,在这种情况下,所有引用都被视为对具有更高优先级的变量的引用。
如果一个变量是本地变量而另一个变量是全局变量,则局部变量如果在范围内则会获胜。
如果有两个局部变量具有重叠范围,则这是XSLT 1.0中的错误,但在XSLT 2.0中是允许的;在重叠区域内,范围较小的变量获胜。
答案 1 :(得分:1)
如果两个或多个顶级变量(在任何模板之外)具有相同的名称,则会出错。
同样,如果同一模板中的两个或多个变量具有相同的名称,则会出错。
但允许模板中的变量 shadow 顶级同名变量。
变量之间没有冲突,除非它们的范围(变量可见的样式表部分)重叠。模板内部变量的范围包括以下兄弟元素及其后代。顶级变量的范围在该变量之后的样式表中无处不在。
答案 2 :(得分:0)
我找到了钥匙。
MSXML 3.0仅支持XDR架构,它不支持XSD架构。 MSXML 4.0,MSXML 5.0和MSXML 6.0支持XSD架构。