0

たとえば、変数 $NodeVariable を定義しました。

<xsl:variable name="NodeVariable">
    <aT>
        <aT2>foo</aT2>
        <aT3>bar</aT3>
    </aT>
</xsl:variable>

コードのさまざまな部分で、さまざまなテンプレートを myVariable に「適用」したいと考えています。残念ながら、これの構文はわかりません。

私は次のことを試しました:

<xsl:for-each select="$NodeVariable"> 
    <xsl:call-template name="ns:ExtractInfo1"/>
</xsl:for-each>

<xsl:copy-of select="$NodeVariable"> 
    <xsl:call-template name="ns:ExtractInfo2"/>
</xsl:for-each>

<xsl:copy-of select="$NodeVariable"> 
    <xsl:call-template name="ns:ExtractInfo3"/>
</xsl:for-each>

これは機能しません。

ツリー フラグメントにテンプレートを適用する方法は?

4

1 に答える 1

2

XSLT 1.0 プロセッサを使用すると仮定すると、最初に結果ツリー フラグメントをノード セットに変換する必要があります。

<xsl:variable name="NodeVariable">
    <aT>
        <aT2>foo</aT2>
        <aT3>bar</aT3>
    </aT>
</xsl:variable>

<xsl:variable name="NodeSet" select="exsl:node-set($NodeVariable)"/>

(スタイルシートが宣言する場所xmlns:exsl="http://exslt.org/common")、必要に応じてさまざまなモードでテンプレートを適用できます。

<xsl:apply-templates select="$NodeSet/aT" mode="m1"/>

そのモードのテンプレートを書きます。

<xsl:template match="aT" mode="m1">
  <xsl:value-of select="aT2"/>
</xsl:template>

もちろん、本当に名前付きテンプレートを呼び出したい場合は、それも可能ですが、私の見解では、さまざまな処理ステップに適用テンプレートとモードを使用することが、XSLT で推奨される方法です。

于 2014-07-03T08:41:55.290 に答える