重用嵌套的XSL模板

时间:2012-01-27 08:13:44

标签: xslt

我正在尝试重复使用XSL模板,并多次将其他模板放在此模板中。

以下是我的代码示例:

<xsl:template name="wrapper">
    <div>
        <xsl:apply-templates/>
    </div>
</xsl:template>

<xsl:template name="template1"></xsl:template>
<xsl:template name="template2"></xsl:template>

所以,现在我想在模板'wrapper'中应用模板1和模板2,就像这样(我知道这不是正确的代码,但想法就在那里):

<xsl:template name="template1">
    <xsl:template match="wrapper">
    <!--code here-->
    </xsl:template>
</xsl:template>
<xsl:template name="template2">
    <xsl:template match="wrapper">
    <!--code here-->
    </xsl:template>
</xsl:template>

对此有任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:8)

将模板定义嵌套到另一个中在语法上是非法的。

根据W3C XSLT(1.0和2.0)规范,xsl:template必须是顶级元素xsl:stylesheet的子级。

这意味着样式表模块中的所有模板都必须是兄弟姐妹。

调用 命名模板 的方法是使用此类xsl:call-template指令

<xsl:call-template name="someTemplateName">
 <!-- Possibly place one or more `xsl:with-param` elements here -->
</xsl:call-template>

但是,要注意

使用未命名的模板(具有match属性)并使用xsl:apply-templates指令选择最匹配的模板,这是一种很好的风格,更符合XSLT的精神

SO XSLT问题的大多数答案都证明了xsl:apply-templates的使用。

答案 1 :(得分:0)

  

所以,现在我想在模板'wrapper'中应用模板1和模板2,

如果我从字面上理解这一点:

<xsl:template name="wrapper">
  <xsl:call-template name="template1" />
  <xsl:call-template name="template2" />
</xsl:template>

但我有一种强烈的直觉感觉你在某种程度上在这里射击自己。