■ xsl:sort要素
データの並べ替えは「xsl:sort」要素で行う事ができます。
select属性で並べ替えたいノードを指定し、
data-type属性で「text」
「number」(データ型)を指定します。
この要素は「xsl:apply-template」
「xsl:for-each」
要素の子要素として設定します。
<xsl:sort select="XPath式" data-type="データ型"/>
では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample15.xml」、
XSLTスタイルシートを「test15.xsl」
として保存します。「sample15.xml」ファイルに記述する
xml-stylesheet処理命令のhref属性に
「test15.xsl」と指定して下さい。
■ sample15.xml
<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test15.xsl" type="text/xsl"?>
<会員情報>
<会員>
<名前>名前一郎</名前>
<クラス>B</クラス>
<番号>4</番号>
<総合時間>18</総合時間>
</会員>
<会員>
<名前>名前二郎</名前>
<クラス>A</クラス>
<番号>2</番号>
<総合時間>20</総合時間>
</会員>
<会員>
<名前>名前三郎</名前>
<クラス>B</クラス>
<番号>6</番号>
<総合時間>30</総合時間>
</会員>
<会員>
<名前>名前四郎</名前>
<クラス>D</クラス>
<番号>9</番号>
<総合時間>18</総合時間>
</会員>
</会員情報>
■ test15.xsl
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="会員情報">
<html>
<body>
<h2>出現順</h2>
<xsl:apply-templates select="会員"/>
<h2>番号の昇順</h2>
<xsl:apply-templates select="会員">
<xsl:sort select="番号" data-type="number"/>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="会員">
<p>
<b><xsl:value-of select="名前"/>・・</b>
番号:<xsl:value-of select="番号"/>
クラス:<xsl:value-of select="クラス"/>
総合時間:<xsl:value-of select="総合時間"/>
</p>
</xsl:template>
</xsl:stylesheet>
上記のファイルでは、始めに
データをXML文書に記述した順(出現順)に表示させ、
次にデータを「番号」要素の昇順に並べ替え、表示します。
「xsl:sort」要素のselect属性に
「番号」を指定して、
data-type属性に「number」を設定します。
data-type属性には並べ替えるデータによって
「text」(文字列)
「number」(数値)
を指定しますが、数値データの場合に「text」を設定すると、
正しく並べ替えられない事があるので注意して下さい。
これらを記述してsample15.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。)
下記のような実行結果になります。
出現順
名前一郎・・番号:4 クラス:B 総合時間:18
名前二郎・・番号:2 クラス:A 総合時間:20
名前三郎・・番号:6 クラス:B 総合時間:30
名前四郎・・番号:9 クラス:D 総合時間:18
番号順
名前二郎・・番号:2 クラス:A 総合時間:20
名前一郎・・番号:4 クラス:B 総合時間:18
名前三郎・・番号:6 クラス:B 総合時間:30
名前四郎・・番号:9 クラス:D 総合時間:18
上記の例では、データを昇順に並べ替えて表示しました。
「xsl:sort」要素は昇順だけでなく、
降順にも並べ替える事ができます。
降順に並べ替えるには「order」属性に
「ascending」を指定すると昇順に、
「descending」を指定すると、降順に並べる事ができます。
「order」属性を省略した場合は昇順に並びます。
上記と同じファイルを使用して
test15.xslファイルの「xsl:sort」要素の
「order」属性に
「descending」を指定します。
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="会員情報">
<html>
<body>
<h2>出現順</h2>
<xsl:apply-templates select="会員"/>
<h2>番号の昇順</h2>
<xsl:apply-templates select="会員">
<xsl:sort select="番号" data-type="number" order="descending"/>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="会員">
<p>
<b><xsl:value-of select="名前"/>・・</b>
番号:<xsl:value-of select="番号"/>
クラス:<xsl:value-of select="クラス"/>
総合時間:<xsl:value-of select="総合時間"/>
</p>
</xsl:template>
</xsl:stylesheet>
これらを記述してsample15.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。)
下記のような実行結果になります。
出現順
名前一郎・・番号:4 クラス:B 総合時間:18
名前二郎・・番号:2 クラス:A 総合時間:20
名前三郎・・番号:6 クラス:B 総合時間:30
名前四郎・・番号:9 クラス:D 総合時間:18
番号順
名前四郎・・番号:9 クラス:D 総合時間:18
名前三郎・・番号:6 クラス:B 総合時間:30
名前一郎・・番号:4 クラス:B 総合時間:18
名前二郎・・番号:2 クラス:A 総合時間:20
|