2012-01-27 84 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