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

これについての助けがあれば幸いです。

だから、
+0

これは動作しません。あなたは何をしようとしているのですか?入力XMLと希望の出力を入力してください。 – Tomalak

+0

私はあなたが達成しようとしているもののエッジを見ることができますが、トマラクは言うように、われわれの理解を助けるいくつかの例がない限り、有用な方法で本当に答えることはできません。 – Murph

+0

' 'という名前のテンプレートの中にcall-templateを呼び出すことができます。 –

答えて

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

+0

@Krishna:あなたは大歓迎です。 –

0

、今私は、テンプレート内のテンプレート1、テンプレート2の両方を適用する「ラッパー」、

私は、文字通りこれを取る場合:

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

しかし、私は強く、腸を持っていますあなたが何とかここで足で自分を撃っていると感じている。

+0

私はテンプレート1と2の中でxmlを使って作業しています。しかし、ラッパーはxmlとは関係ありません。アイデアはこれです: 'ます。 ます。 < - - ここでのコード!> <! - code here - > 私はXSLで非常に新しいです、そして、私は間違った方法でそれを使用していると考え始めています。しかし、このようなことが可能ならば、非常に便利です。 – Rinux

+5

@Rinux:あなたは何をしようとしているのか、まだ教えていない。これは[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)です。あなたはXをやろうとしていて、Yはうまくいくかもしれないと思っているので、Yについて質問しますが、Xが何であるかを決して伝えません。実際のXMLを私に教えてください。 – Tomalak

+0

Allright;あなたが正しい。ここに私のX:PHP/XMLとXLSTでレンダリングされているいくつかのコンテンツがあります。私はこのコンテンツを、影である画像を含むテーブルである「ラッパー」でレンダリングします。なぜCSSを使用しないのですか?インターネットエクスプローラ。しかし、私はいくつかの広範な検索を行い、私は純粋なCSSで解決策を見つけた可能性があると思う。そして、私が言ったように、私は間違った方法でXLSTを使っていたと思います。次回はXではなく、Yで考える。あなたの助けをありがとう! – Rinux

関連する問題