XSLT入門(変数編)
XSLTは基本的なことを知ってるだけだから、とりあえずまとめながら勉強していこう。いつまで続くかな。
昨日Hello, world!はやったから、次は変数かな?ということで変数。
XSLTには、xsl:variableとxsl:paramという2つの変数(のようなもの)が存在します。
これらの違いは、外部から値を設定できるかどうかと、記述できる位置です。
xsl:variableは外部から値は設定できませんが、xsl:template*1直下でなくても記述できます*2。
xsl:paramは外部から値が設定できますが、xsl:template直下*3に置く必要があります。
また、この2つとも、一度しか値を設定できないという特徴があります。
XSLTではユーザー入力なんてありませんので、モナドとかそういうのを引っ張ってくる必要もありません。
xsl:variableに値を設定するには、2通りの方法があります。
一つは、select属性を使用して、
<xsl:variable name="var" select="42"/>
とする方法です。もう一つは、xsl:variable要素の子要素として
<xsl:variable name="var">42</xsl:variable>
とする方法です。
これらは一見同じように見えますが、後者は値ではなく、仮想的なルートノードにぶら下がった42という木構造となります。
なんかややこしいのでほとんどの場合でselectを使用すると思っておけばいいです。
最初のうちはselectの方しか使いません。
xsl:paramはxsl:variableの方法に加え、外部からxsl:with-paramで値を渡すことが出来ます。
<xsl:template name="hoge"> <xsl:param name="param"/> </xsl:template> <xsl:template match="/"> <xsl:call-template name="hoge"> <xsl:with-param name="param" select="0"/> </xsl:call-template> </xsl:template>
このように記述すると、hoge関数のparamという引数に0を渡したことになります。
値を設定した変数の内容を取得するためには、selectの属性値の中などで変数名の先頭に$を付けます。
例えば、
<xsl:variable name="var1" select="7"/> <xsl:variable name="var2" select="$var1 + 3"/>
とすると、var2に10が設定されます。
XSLTではxsl:から始まる要素以外はそのまま出力されますが、XSLTの変数は
<xsl:variable name="var" select="10"/> $var
としても出力されません。
これを出力するためには、xsl:value-ofなどを使います。
<xsl:variable name="var" select="10"/> <xsl:value-of select="$var"/>
これで画面には10と表示されます。
これで変数については一通りカバーできたかと思います。