我正在尝试重复使用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>
对此有任何帮助都会非常感激。
答案 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>
但我有一种强烈的直觉感觉你在某种程度上在这里射击自己。