文件范围变量

时间:2011-02-08 01:34:21

标签: xslt global-variables

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

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

这可能吗?

谢谢!

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

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

如果变量的值在变换期间是常量,则可以将其置于条目模板之外,使其成为全局变量。

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

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