XSLTでの再帰処理
以前書いたXSLTから部分的にページングを行う再帰処理の箇所を抜き出してみました。
<xsl:template name="NextPage">
<xsl:param name="n" />
<xsl:if test="$ItemPage + $n <= $TotalPage">
<xsl:element name="a"><xsl:attribute name="href">./<xsl:value-of select="$BrowseNode" />_<xsl:value-of select="$ItemPage + $n" /></xsl:attribute>[<xsl:value-of select="$ItemPage + $n" />]</xsl:element>
<xsl:if test="$n < 5">
<xsl:call-template name="NextPage">
<xsl:with-param name="n" select="$n + 1" />
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>
この処理を呼び出すにはこんな感じ。
<xsl:call-template name="NextPage"> <xsl:with-param name="n" select="1" /> </xsl:call-template>
call-template関数にwith-param変数を設定して渡してます。このページングの処理例ですと
1 [2] [3] [4] [5] [6]
こんな感じで出力されます。1が現ページで、2~6ページが再帰処理で出力。昔XSLTを触り始めた頃にページング処理をどうやってやるんだろう?と悩んだことがあったので同じ事に悩む人がいるかも知れないのでエントリしてみました。
ちなみに再帰処理のところの
<xsl:element name="a"><xsl:attribute name="href">./<xsl:value-of select="$BrowseNode" />_<xsl:value-of select="$ItemPage + $n" /></xsl:attribute>[<xsl:value-of select="$ItemPage + $n" />]</xsl:element>
の行なんですけど、このようにも書けたりします。
<a href="./{$BrowseNode}_{$ItemPage + $n}">[<xsl:value-of select="$ItemPage + $n" />]</a>
どちらで書いてもOKです。自分のプログラミング作法に従って気持ちの良い書き方で・・・。俺はなるべく elemnt関数は使わない方向でXSLTは書いてます。

コメント