2011-05-18 12 views
5

私はちょうどXSL(T)を学び始めました。どうすればapply-templatesがうまくいくのでしょうか?私は再帰的にそれが私の本に書かれているようにテンプレートの一部を適用することを理解していない。apply-templatesはどのように機能しますか?

私は、XSLのXPathの部分(T)を理解し、そうではなく、何apply-templatesは、複数回やって、なぜ私はそれを書くされます。

答えて

3

書籍で適用テンプレートを読んだことがあるが、それを理解していない場合は、ここでいくつかの単語が役立つことは明らかではありません。おそらくあなたは別の本が必要です。異なるチュートリアルスタイルは、異なる人々にアピールします。 http://vimeo.com/15234803のようなオンラインのチュートリアルでは、アイデアを得るでしょう。

テンプレートメカニズムの本質は、2つの関係者が関与していることです。 xsl:apply-templates命令は処理のためにいくつかのノードを選択し、テンプレートルール(それらの間のルール)はその処理が何であるべきかを決定する。これは非常に緩やかなカップリングと大きな懸念の分離をもたらします。それはむしろオブジェクト指向のメッセージ/メソッドのディスパッチに似ていますが、はるかに柔軟です。

+0

上記のチュートリアルでは、apply-templatesの明確なアイデアを示しています。また、mode = 'parent'を使用する目的を知る必要があります。 –

+0

私の本をおすすめします: Wrox PressのXSLT 2.0プログラマのリファレンス名前付きモードのようなものになったら、まともな参考書が必要です。 –

8

<xsl:apply-templates>を使用して、定義した<xsl:template>:を呼び出します。

<xsl:apply-templates>は、セット内の各ノードに一致するテンプレートを呼び出します。

apply-templatesselect属性を指定することで、処理順序を制御できます。

w3schoolsからこの例を参照してください:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>My CD Collection</h2> 
    <xsl:apply-templates/> 
    </body> 
    </html> 
</xsl:template> 

<xsl:template match="cd"> 
    <p> 
    <xsl:apply-templates select="title"/> 
    <xsl:apply-templates select="artist"/> 
    </p> 
</xsl:template> 

<xsl:template match="title"> 
    Title: <span style="color:#ff0000"> 
    <xsl:value-of select="."/></span> 
    <br /> 
</xsl:template> 

<xsl:template match="artist"> 
    Artist: <span style="color:#00ff00"> 
    <xsl:value-of select="."/></span> 
    <br /> 
</xsl:template> 

</xsl:stylesheet> 
  • 最初apply-templates"cd"名前付き要素に遭遇するたびcdテンプレートを呼び出します。

  • cdテンプレートは、順番に<cd>の子要素を処理するためにtitleartistテンプレートを呼び出します。

  • titleは、artistの前に処理されます。ソースXMLにあるartisttitleの要素の順序は違いがないことに注意してください。

あなたは、手続き型言語のサブルーチンコールにanaloguousとしてapply-templatesと考えることができます。

1

完了したテンプレートルールを理解している場合は、それが簡単ではないとしても、彼らは常に驚きを与えます。 Read the specs

関連する問題