value属性
・番号を式を使い算出し指定する。通常はposition()関数を利用する。
・ソート処理の結果に<xsl:number>を指定しても、元のXML文書の並び順で番号が付く。value属性にposition()を指定することでソート処理の結果が反映する。
[サンプルXML文書を表示](下のフレームに)
XMLソース
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="number02.xsl"?>
<root>
<title>2003年11月05日の東証株式第一部情報</title>
<info><name>銘柄</name><end>終値(円)</end><total>出来高(千株)</total></info>
<data1>
<kabu1><name code="6752">松下</name><end>1529</end></kabu1>
<kabu1><name code="6753">シャープ</name><end>1786</end></kabu1>
<kabu1><name code="6758">ソニー</name><end>4030</end></kabu1>
<kabu1><name code="6502">東芝</name><end>440</end></kabu1>
<kabu1><name code="6701">NEC</name><end>1027</end></kabu1>
<kabu1><name code="6702">富士通</name><end>708</end></kabu1>
</data1>
<data2>
<kabu2><name code="6752">松下</name><end>1529</end></kabu2>
<kabu2><name code="6753">シャープ</name><end>1786</end></kabu2>
<kabu2><name code="6758">ソニー</name><end>4030</end></kabu2>
<kabu2><name code="6502">東芝</name><end>440</end></kabu2>
<kabu2><name code="6701">NEC</name><end>1027</end></kabu2>
<kabu2><name code="6702">富士通</name><end>708</end></kabu2>
</data2>
<data3>
<kabu3><name code="6752">松下</name><end>1529</end></kabu3>
<kabu3><name code="6753">シャープ</name><end>1786</end></kabu3>
<kabu3><name code="6758">ソニー</name><end>4030</end></kabu3>
<kabu3><name code="6502">東芝</name><end>440</end></kabu3>
<kabu3><name code="6701">NEC</name><end>1027</end></kabu3>
<kabu3><name code="6702">富士通</name><end>708</end></kabu3>
</data3>
<data4>
<kabu4><name code="6752">松下</name><end>1529</end></kabu4>
<kabu4><name code="6753">シャープ</name><end>1786</end></kabu4>
<kabu4><name code="6758">ソニー</name><end>4030</end></kabu4>
<kabu4><name code="6502">東芝</name><end>440</end></kabu4>
<kabu4><name code="6701">NEC</name><end>1027</end></kabu4>
<kabu4><name code="6702">富士通</name><end>708</end></kabu4>
</data4>
<end>以上です(2003/12/1)</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:template match="/">
<center><H3><xsl:value-of select="root/title"/></H3></center>
<xsl:apply-templates select="root/data1"/>
<HR/>
<xsl:apply-templates select="root/data2"/>
<HR/>
<xsl:apply-templates select="root/data3"/>
<HR/>
<xsl:apply-templates select="root/data4"/>
</xsl:template>
<!--1001から開始-->
<xsl:template match="data1">
<p style="color:red">1001から開始</p>
<xsl:apply-templates select="kabu1" />
</xsl:template>
<xsl:template match="kabu1">
<xsl:number value="position()+1000"/>)<xsl:apply-templates />/
</xsl:template>
<!--逆順数字で-->
<xsl:template match="data2">
<p style="color:red">逆順数字で</p>
<xsl:apply-templates select="kabu2" />
</xsl:template>
<xsl:template match="kabu2">
<xsl:number value="last()+1-position()"/>:<xsl:apply-templates />/
</xsl:template>
<!--Eから開始-->
<xsl:template match="data3">
<p style="color:red">Eから開始</p>
<xsl:apply-templates select="kabu3" />
</xsl:template>
<xsl:template match="kabu3">
(<xsl:number value="position()+4" format="A"/>)<xsl:apply-templates />/
</xsl:template>
<!--ソート結果に番号を付ける-->
<xsl:template match="data4">
<p style="color:red">ソート結果に番号を付ける</p>
<xsl:apply-templates select="kabu4">
<xsl:sort select="end" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="kabu4">
{<xsl:number value="position()"/>}<xsl:apply-templates />/
</xsl:template>
</xsl:stylesheet>
end(03/12/1)