请原谅这个可怜的命名法,可能是为什么我在努力谷歌答案。
基本上我问的是,xslt 2.0中的参数隧道是否有1.0中的任何模拟,或者是否有一种聪明的方法来获得'某种方式'。我正在使用msxsl
假设我有一个这样的模板:
<xsl:template name="outer">
<xsl:apply-templates>
<xsl:with-param name="x" select="y"/>
</xsl:apply-templates>
</xsl:template>
如果apply-templates调用直接由知道参数的模板获取,那么一切都很好,但假设我们有一些通用模板来忽略某些元素并处理它们的子代:
<xsl:template match="tag_to_ignore">
<xsl:apply-templates/>
</xsl:template>
如果这些是'命中'或者当tag_to_ignore没有明确匹配并且XSLT默认将模板应用于子行为时
参数“丢失”
无论如何都要告诉模板“接受”它传递的所有参数并将其传递下去?
(即实际代码中有许多,很多,可能需要传递的参数,试图避免必须接受每个可能的para并明确传递它的维护问题)
答案 0 :(得分:2)
在XSLT 2.0中,您可以使用tunnel parameters但在XSLT 1.0中没有这样的功能。
答案 1 :(得分:2)
实际上,在听说隧道参数之前我遇到了类似的问题,并通过在一次性模板中添加相同的参数来解决它,然后在apply-templates中将其传回去。例如,在你的情况下
<xsl:template match="tag_to_ignore">
<xsl:param name="x"/>
<xsl:apply-templates>
<xsl:with-param name="x" select="$x" />
</xsl:apply-templates>
</xsl:template>
我 THINK 这将在XSLT 1.0中有效,但我自己对这一切都很陌生。