将XSL参数传递给模板的通用方法

时间:2012-10-31 17:15:29

标签: xslt xslt-2.0

我有几个样式表和模板,我想为所有这些添加一些行为。 我们这样说:

<xsl:template match="*" priority='10'>
    <xsl:apply-templates select="." mode="someFunStuffsToDo"/>
    <xsl:next-match/>
</xsl:template>

但是,由于我需要一些通用模板,因此我对params有问题,因为我不知道所有不同类型的param。

有没有'简单'的方式来说这样的话:

<xsl:template match="*" priority='10'>
    <xsl:param select="All the params you get"/>
    <xsl:apply-templates select="." mode="someFunStuffsToDo">
         <xsl:with-param select="All the params you got"/>
    </xsl:apply-templates>
    <xsl:next-match/>
</xsl:template>

我可以想象一些基于通用参数的解决方案,其中包含参数的节点但是我需要重写我的大多数实际模板以切换不同的细节params声明的通用参数...

编辑: 好的,我想我只是在发布问题之前找到解决方案: 隧道参数。 根据我的理解,这是否符合我的目的,我的意思是

<xsl:template match="*" priority='10'>
    <xsl:apply-templates select="." mode="someFunStuffsToDo"/>
    <xsl:next-match/>
</xsl:template>
如果我只是在属性tunnel ='yes'之前和之后设置我的参数,

会有效吗? (我还没有对我进行测试和羞辱,但我认为下一场比赛将保留当前模式)

1 个答案:

答案 0 :(得分:0)

是的,tunnel参数有帮助,但您需要确保您的传递代码和接收模板分别具有<xsl:with-param name="foo" tunnel="yes" select="bar"/> <xsl:param name="foo" tunnel="yes"/>。但是,中间的任何模板(如您所拥有的模板)将不需要with-param