2011-02-08 111 views
1

需要一个我可以从任何模板访问的变量。文件作用域变量

我在总是调用的文件开始处有一个全局模板。我希望能够在运行apply-templates时调用的模板中访问此变量。

这可能吗?

谢谢!

编辑:这是我的问题的一个很好的总结。我有各种各样的模板被调用(以各种顺序)。他们把表单控件放在页面上。我希望通过使用索引来引用XML中的一组数据。每次我点击其中一个模板并打算创建一个论坛控件时,我希望能够使用这个“全局”变量作为计数器。

+1

这听起来像是你将XSLT与各种其他编程语言混淆了。 – 2011-02-08 01:39:41

+0

编辑您的帖子并显示您的XSLT示例,指出“全局模板”的含义以及与“变量”相关的方式。 – 2011-02-08 04:04:05

回答

1

需要一个变量我可以从任何模板 访问。

XSLT语言提供了global variables(称为顶级变量)。

每个<xsl:variable>,它是<xsl:stylesheet>的孩子是全局的,可以从任何模板或从完整导入树中的任何其他全局变量访问。

这是一个小例子。这种转变

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:variable name="vMyVar" select="3"/> 

<xsl:template match="/"> 
    From template matching '/': "<xsl:text/> 

    <xsl:value-of select="$vMyVar"/>" 
    <xsl:call-template name="template2"/> 
</xsl:template> 

<xsl:template name="template2"> 
    From template2: "<xsl:text/> 

    <xsl:value-of select="$vMyVar"/>" 
</xsl:template> 
</xsl:stylesheet> 

当应用于任何XML文档(未使用),会产生这样的结果

From template matching '/': "3" 

    From template2: "3" 
0

如果变量的值是在转型过程中保持恒定,可以使它通过将其放在输入模板之外而成为一个全局变量。

如果变量在不同的时间有不同的值,那么您需要使用在调用模板中设置并用于调用模板的参数。 (在XSLT 2.0中,您可以使用隧道参数:如果这些参数在条目模板中设置,那么它们可以在任何地方使用,而不必通过所有中间模板调用显式传递)。

作为一般原则,当你没有描述你的问题时,很难告诉你,只有一个建议的解决方案 - 你在XSLT中的经验水平是这样的,你试图实现的解决方案可能不是最合适的一个。