・出力順を制御する、即ちデータを並べ替える。
・ソート処理<xsl:sort>は繰り返し処理、即ち<xsl:for-each>と<xsl:apply-templates>の子要素としてだけ指定できる。
★書式・・・<xsl:sort select="" data-type="" order=""/>
select属性
・ソート(並べ替え)処理するnodeを指定
・省略時はカレントnodeに(select="." と同じ)
data-type属性
・select属性で指定されたnodeのデータ型を"text|number"(文字列か数値)で指定。
・省略時は"text"とみなされる。
order属性
・出力順を文字コードの昇順("ascending")、降順("descending")かを指定。
・省略時は昇順("ascending")とみなされる。
[サンプルXML文書を表示](下のフレームに)
XMLソース
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="sort04.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="6701">NEC</name><end>1027</end><total>19229</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="6753">シャープ</name><end>1786</end><total>3964</total></kabu>
<kabu><name code="6502">東芝</name><end>440</end><total>17832</total></kabu>
<kabu><name code="6702">富士通</name><end>708</end><total>16634</total></kabu>
</data>
<end>以上です(2003/11/15)</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/data"/>
</xsl:template>
<xsl:template match="data">
<h4>銘柄名を降順("descending")で表示する例</h4>
<xsl:for-each select="kabu/name">
<xsl:sort select="." data-type="text" order="descending"/>
<xsl:value-of select="."/><br/>
</xsl:for-each>
<hr/>
<h4>銘柄名を銘柄コードの昇順("ascending")で表示する例</h4>
<xsl:for-each select="kabu">
<xsl:sort select="name/@code" data-type="number" order="ascending"/>
<xsl:value-of select="name"/>(コード:<xsl:value-of select="name/@code"/>)<br/>
</xsl:for-each>
<hr/>
<h4><xsl:apply-templates>を使った例(終値順でソート)</h4>
<xsl:apply-templates select="kabu">
<xsl:sort select="end" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="kabu">
<xsl:value-of select="name"/>:<xsl:value-of select="end"/><br/>
</xsl:template>
</xsl:stylesheet>
end(03/12/1)