XSLT 1.0:在'pass-through'模板中传递_all_参数(即隧道)

时间:2014-10-23 11:15:09

标签: xslt xslt-1.0

请原谅这个可怜的命名法,可能是为什么我在努力谷歌答案。

基本上我问的是,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并明确传递它的维护问题)

2 个答案:

答案 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中有效,但我自己对这一切都很陌生。