パラメータの利用 <xsl:param>

<xsl:param>

★書式・・・<xsl:param name="パラメータ名" select="XPath式または文字列"/>
       または<xsl:param name="パラメータ名">パラメータ値</xsl:param>

・name属性・・・必須、パラメータ名を指定。日本語可能
・select属性・・・パラメータのデフォルト値としてXPath式または文字列を設定。
*XPath式の場合・・・XPath式の評価された結果がパラメータの値となる(ノードの値、ノードセットの場合先頭のノードの値、その他、XPath式が返す数値やブール値)
*文字列の場合、select="'文字列'"のようにシングルクォート''で囲わなければならない。
・select属性、またはパラメータ値を省略し、パラメータ名だけを定義。そして値は、テンプレートを呼び出す時に<xsl:with-param>で設定することもできる。

★特記

・変数<xsl:variable>と同じようにパラメータを定義する。通常はパラメータ名の定義だけ行い、値は、テンプレートを呼び出す時に<xsl:with-param>で設定する。パラメータの値を設定した場合は、その値は<xsl:with-param>を使わなかった時のデフォルト値になる。
・親要素・・・<xsl:stylesheet>、<xsl:template>、<xsl:transform>要素だけ
・定義したブロックでしか使用できない(ローカルなパラメータ)。<xsl:stylesheet>要素直下で定義すればXSLTスタイルシート全体で使用できる。(グローバルなパラメータ)
・パラメータの参照・・・ $パラメータ名 で参照する。
・変数と似ているが、以下の点で異なる。
*変数<xsl:variable>の定義は記述場所に制限がなく、どこでも定義できる。パラメータを定義する場所は<xsl:stylesheet><xsl:template><xsl:transform>要素直下だけ。通常は名前付きテンプレート内で使用する。
*変数の値は変更できないがパラメータの場合、<xsl:apply-templates>や<xsl:call-template>でテンプレートを呼び出す時に<xsl:with-param>で変更できる。

[サンプルXML文書を表示](下のフレームに)

XMLソース

<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="param01.xsl"?>
<root>
<title>2003年11月05日の東証株式第一部情報</title>
<info><name>銘柄</name><end>終値(円)</end><total>出来高(千株)</total></info>
<data>
<kabu><name code="6752">松下</name><end>1529</end><total>12302</total></kabu>
<kabu><name code="6753">シャープ</name><end>1786</end><total>3964</total></kabu>
<kabu><name code="6758">ソニー</name><end>4030</end><total>8220</total></kabu>
<kabu><name code="6764">三洋</name><end>516</end><total>7551</total></kabu>
<kabu><name code="6501">日立</name><end>692</end><total>21896</total></kabu>
<kabu><name code="6502">東芝</name><end>440</end><total>17832</total></kabu>
<kabu><name code="6701">NEC</name><end>1027</end><total>19229</total></kabu>
<kabu><name code="6702">富士通</name><end>708</end><total>16634</total></kabu> </data>
<end>以上です(2004/5/17)</end>
</root>

XSLソース

<?xml version="1.0" encoding="Shift_Jis"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Shift_JIS"/>
<!--グローバルなパラメータ-->
<xsl:param name="おわりね" select="/root/info/end"/><!--ノードの値-->
<xsl:param name="情報" select="/root/info"/><!--ノード-->
<xsl:template match="/">
<center><H3><xsl:value-of select="$date"/></H3></center>
<xsl:apply-templates select="root/data"/>
</xsl:template>
<xsl:template match="data">
<xsl:param name="meigara" select="'銘柄:'"/><!--ローカルなパラメータ-->
<xsl:value-of select="$meigara"/><xsl:value-of select="kabu[1]/name"/>
・・・<xsl:value-of select="$おわりね"/>[<xsl:value-of select="kabu[1]/end"/>]、
<xsl:value-of select="$情報/total"/>[<xsl:value-of select="kabu[1]/total"/>]<br/>
銘柄総数は・・・[<xsl:value-of select="$銘柄総数"/>]
</xsl:template>
<!--グローバルなパラメータの記述場所は問わない。参照する後で定義してもよい-->
<xsl:param name="date">2003年11月05日の東証株式第一部情報test2</xsl:param><!--文字列-->
<xsl:param name="銘柄総数" select="count(//kabu)"/><!--数値-->
</xsl:stylesheet>

end(04/5/17)