番号付け<xsl:number>のlevel属性 2

level="multiple"

・複数レベルの番号付けを可能にする。single指定により出力された番号の前に祖先ノードの番号も付加する。
・count属性に番号付けする複数のノードを指定。"*"を指定すれば全てのレベルに番号が付く。
・format属性に複数レベルの書式を設定。各レベルを区切る記号は任意に指定できる。区切り記号で区切った書式よりレベル数のほうが多い場合、最後の書式が繰り返される。

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

・(例1)では、先頭レベルからkabu要素まで、全要素がカウントされて全レベルで番号が付く。root要素は1個だけなので"A"が、data1要素は1個しかなくそのレベルのカウントが4番目なので"W"が、kabu要素は出現順に"01"から"08"までの番号が付く。
・(例2)では、data2要素とkabu要素だけカウントされ、そのレベルだけに番号が付く。data2要素は1個しかなく1がカウンされ"a"に、kabu要素は出現順に"1"から"8"までの番号が付く。

XMLソース

<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="number05.xsl"?>
<root>
<title>2003年11月05日の東証株式第一部情報</title>
<info><name>銘柄</name><end>終値(円)</end><total>出来高(千株)</total></info>
<memo>番号付け&lt;xsl:number&gt;のlevel属性</memo>
<data1>
<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> </data1>
<data2>
<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> </data2>
<end>以上です(2003/12/2)</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="/">
<div style="color:red">(例1:kabu要素)</div>
<xsl:apply-templates select="root/data1/kabu"/>
<hr/>
<div style="color:red">(例2:name要素)</div>
<xsl:apply-templates select="root/data2/kabu/name"/>
<hr/>
</xsl:template>

<xsl:template match="kabu">
(<xsl:number level="multiple" count="*" format="A→I...01"/>)<xsl:apply-templates select="name"/>/
</xsl:template>
<xsl:template match="data2/kabu/name">
(<xsl:number level="multiple" count="data2|kabu" format="a_*1"/>)<xsl:apply-templates />/
</xsl:template>
</xsl:stylesheet>

end(03/12/2)