2012-01-27 78 views
1

我想重新使用XSL模板,并将其他模板放在此模板中多次。重新使用嵌套的XSL模板

这里是我的代码示例:

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

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

所以,现在我想申请这两个模板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> 

对此的任何帮助将grealty赞赏。

+0

这不是它的工作原理。你想做什么?请提供一些输入XML和根据需要的输出。 – Tomalak 2012-01-27 08:17:33

+0

我可以看到你想要实现的目标,但是,正如@Tomalak所说,除非我们有一些例子来帮助我们理解我们无法真正以任何有用的方式回答 – Murph 2012-01-27 08:20:22

+0

你知道''和你可以“嵌套”这些事实,即,在命名模板中调用call-template,是的? – 2012-01-27 13:27:10

回答

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> 

然而,beaware是

这是一个良好的作风以及更多XSLT精神使用未命名的模板(具有match属性)并选择与xsl:apply-templates指令匹配的最佳模板。

SO XSLT问题的大部分答案都证明了使用xsl:apply-templates

+0

非常好的答案 – Krishna 2014-06-04 09:37:35

+0

@Krishna:不客气。 – 2014-06-04 14:03:06

0

所以,现在我想如果我把这个从字面上同时应用模板1和模板2内模板“包装”,

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

但是我有一种强烈的直觉感觉你不知何故在这里拍摄自己的脚。

+0

我正在做模板1和2中的XML的东西。然而,包装与XML无关。我们的想法是这样的: '的 < - 这里的代码 - > < - 这里的代码 - > ' 我在XSL上很新,而且我开始相信我以错误的方式使用它。但是,如果这样的事情是可能的,它会非常方便。 – Rinux 2012-01-27 08:29:12

+5

@Rinux:你还没有告诉我你在做什么。这是[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你试图做X并且认为Y可能工作,所以你问Y,但从不知道X是什么。请给我实际的XML工作。 – Tomalak 2012-01-27 09:30:16

+0

好的;你是对的。这里是我的X:我有一些使用PHP/XML和XLST呈现的内容。我希望这个内容能够在'包装器'中呈现,它是一个包含阴影图像的表格。为什么不使用CSS? IE浏览器。但是,我做了一些广泛的搜索,我想我可能已经找到了纯CSS的解决方案。而且 - 正如我所说 - 我认为我以错误的方式使用了XLST。下次我会在X中考虑,而不是在Y.感谢您的帮助! – Rinux 2012-01-27 10:24:26