需要我可以从任何模板访问的变量。
我总是在文件的开头有一个全局模板。我希望能够在运行apply-templates时调用的模板中访问此变量。
这可能吗?
谢谢!
编辑:这是我的问题的一个很好的总结。我有各种模板被调用(以各种顺序)。他们在页面上放置表单控件。我在XML中有一组数据,我想通过使用索引来引用它。每当我点击其中一个模板并将要呈现论坛控件时,我希望能够将此“全局”变量用作计数器。
答案 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中的经验水平是这样的,您尝试实施的解决方案可能不是最多的适当的。