1

私はいくつかのユーティリティxsltテンプレートに取り組んでおり、パラメータに基づいて別のテンプレートを呼び出すことができるテンプレートを作成したいと思います。

私が達成したいこと:

<xsl:template name="OuterTemplate.AlternatingRow">
    <xsl:param name="Position" />
    <xsl:param name="CallTemplate" />
    <xsl:if test="$Position mod 2 = 0">
        <xsl:if test="$CallTemplate != ''">
            <xsl:call-template name="$CallTemplate"></xsl:call-template>
        </xsl:if>
    </xsl:if>
</xsl:template>

<xsl:call-template name="$CallTemplate"></xsl:call-template>しかし、許可されたアクションではないため、エラーが発生し続けます。

これも可能ですか?グーグルでこれについて多くを見つけることができませんでした。

4

3 に答える 3

3

XSLT仕様によると、のname属性は<xsl:call-template>リテラルqnameである必要があり、変数参照などの式にすることはできません。

于 2012-12-20T11:34:24.143 に答える
3

Ian Robertsの受け入れられた答えは正しいですが、XSLT1.0およびXSLT2.0では、「関数」(テンプレート)をパラメーターとして別の関数に渡すことをシミュレートすることができます

これは、XSLT(1.0および2.0)を使用した関数型プログラミング用のFXSLライブラリで実行されています。

FXSLの基本的な主なアイデアについて詳しくは、こちらをご覧ください(XSLT 2.0の場合):http ://conferences.idealliance.org/extreme/html/2006/Novatchev01/EML2006Novatchev01.html

XSLT 1.0の場合:http://conferences.idealliance.org/extreme/html/2003/Novatchev01/EML2003Novatchev01.html

アイデアは、テンプレート名の代わりに$pFun、必要な機能を実装するテンプレートと一意に一致するノード(たとえば)をパラメーターとして渡すことです。呼び出されたテンプレートのThennは、「パラメータとして渡された」テンプレートを呼び出します。

<xsl:apply-templates select="$pFun">
 <!-- Any necessary <xsl:with-param> here -->
</xsl:apply-templates>
于 2012-12-20T14:30:57.103 に答える
1

XSLTの動的ディスパッチのメカニズムはxsl:apply-templatesであり、DimitreNovatchevのFXSLライブラリでこの機能を構築するための独創的な方法を見つけることができます。

于 2012-12-20T14:27:14.517 に答える