問題
ワイルドカード テンプレート マッチからパススルーすると、パラメータが空になります。
私のxmlソース:
<c:control name="table" flags="all-txt-align-top all-txt-unbold">
<div xmlns="http://www.w3.org/1999/xhtml">
<thead>
<tr>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td> </td>
</tr>
</tbody>
</c:control>
私のXSL:
最初のc:control[@name='table']
一致は、XSL アーキテクチャのより広い部分を処理し、メイン テンプレートから呼び出しを分割することです。
<xsl:template match="c:control[@name='table']">
<xsl:call-template name="table" />
</xsl:template>
次に、別のファイルで名前付きテンプレートを呼び出しますが、これによって開始参照が変更されることはありません。一致したテンプレートにいるかのように c:control[@name='table'] を参照できるはずです。
<xsl:template name="table">
<xsl:variable name="all-txt-top">
<xsl:if test="contains(@flags,'all-txt-align-top')">true</xsl:if>
</xsl:variable>
<xsl:variable name="all-txt-unbold" select="contains(@flags,'all-txt-unbold')" />
<div xmlns="http://www.w3.org/1999/xhtml">
<table>
<xsl:apply-templates select="xhtml:*" mode="table">
<xsl:with-param name="all-txt-top" select="$all-txt-top" />
<xsl:with-param name="all-txt-unbold" select="$all-txt-unbold" />
</xsl:apply-templates>
</table>
</div>
</xsl:template>
all-txt-top
上記のテンプレートで値を取得すると、期待どおりに機能します。ただし、以下のテンプレートに渡そうとすると失敗します。何も取得できません。
<xsl:template match="xhtml:thead|xhtml:tbody" mode="table">
<xsl:param name="all-txt-top" />
<xsl:param name="all-txt-unbold" />
<xsl:element name="{local-name()}">
<xsl:apply-templates select="*" mode="table" />
</xsl:element>
</xsl:template>
単純な文字列をパラメーターとして渡そうとしても、 xhtml:thead テンプレートにはなりません。
どこが間違っているのかわからない...どんな助けでも大歓迎です。