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



请原谅这篇文章中糟糕的命名法,这可能是我很难在谷歌上找到答案的原因

基本上,我在问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中工作,但我自己对这一切还相当陌生。

相关内容

  • 没有找到相关文章

最新更新