基本上,我在问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默认将模板应用于子行为时
参数"丢失"
有没有告诉模板"接受"它传递的所有参数并将其传递下去?
(即真正的代码有很多,很多,param可能会进来,也可能需要传递出去,试图避免必须接受每一个可能的para并明确传递它的维护问题)
在XSLT2.0中可以使用隧道参数,但在XSLT1.0中没有这样的功能。
事实上,在听说隧道参数之前,我也遇到过类似的问题,通过将相同的参数添加到一次性模板中,然后在应用模板中重新传递,解决了这个问题。例如,在您的案例中,
<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>
我认为这将在XSLT1.0中工作,但我自己对这一切还相当陌生。