私はテンプレートを "拡張する"テンプレートを書いていますが、いくつか問題があります。これですべてのパラメータを渡すすべてのXSLテンプレートをキャッチする方法は?
<xsl:template match="*[@condition]" mode="#all">
<xsl:element name="condition">
<xsl:attribute name="name">
<xsl:value-of select="@condition"></xsl:value-of>
</xsl:attribute>
<xsl:apply-imports>
</xsl:apply-imports>
</xsl:element>
問題が<xsl:apply-imports>
欠けているのparamsを使用して呼び出されたテンプレートです。 このテンプレートが拡張しようとするテンプレートがたくさんあるので、パラメータのリストはわかりません(したがって、mode="#all"
)。
良い方法がありますか?
追加例:可能性があります
<xsl:apply-templates mode="mode1">
<xsl:with-param name="mode1" select="$mode1"/>
</xsl:apply-templates>
<xsl:apply-templates mode="mode2">
<xsl:with-param name="mode2" select="$mode2"/>
</xsl:apply-templates>
あり:
<xsl:template match="*" mode="mode1">
<param name="p1"/>
</xsl:template>
<xsl:template match="*" mode="mode2">
<param name="p2"/>
</xsl:template>
彼らはどこかに呼ばれている(読み取り専用):
は、2つの最終テンプレート(読み取り専用)考えてみましょうmode1、mode2、mode3、mode4 ...の100であり、名前にはパターンがありません。
最後のテンプレートの周りに追加情報をラップするグローバルテンプレートが必要です。何かが好きです:
<xsl:template match="*" mode="#all">
<xsl:next-match/>
</xsl:element>
上記のグローバルテンプレートは、テンプレートにパラメータを渡しません。
ありがとう:このよう
何か。これは部分的に問題です。別の問題もあります。名前も "foo"で知られておらず、さまざまなパラメータを取るさまざまなテンプレートがあります。すべてのテンプレートを見つけて、そこにあるすべてのパラメータを一覧表示することはできません。 – Jason
@ Jason:すべてのテンプレートでトンネルパラメータを宣言する必要はありません。 –
もう少し完全な例を追加しました。これが私が探しているものを示してくれることを願っています。キーはテンプレートが読み取り専用で、呼び出し元ファイルも読み取り専用です。私は何とかテンプレートを拡張することしかできません。 – Jason