ソート処理(並べ替え)

■書式(数値でソートする場合)
(昇順)
    <xsl:for-each select="ソートする要素"
        order-by="+number(並べ替えのキーとなる要素)">

    + 記号は省略可

(降順)
    <xsl:for-each select="ソートする要素"
        order-by="-number(並べ替えのキーとなる要素)">

★特記
・Microsoft独自仕様(W3C仕様は<xsl:sort select="ソートキー">を使うが、IE5.0xの通常インストールでは機能し
ない)
・"number”はソートキーが数値である場合に付ける。

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

XMLソース

<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="sort01.xsl"?>
<start>
  <top>2000年12月27日の東証株式第一部情報</top>
  <head>銘柄</head>
  <head>終値</head>
  <head>出来高</head>
  
  <kabu><name>松下</name><end>2600</end><total>1658</total></kabu>
  <kabu><name>シャープ</name><end>1388</end><total>1487</total></kabu>
  <kabu><name>ソニー</name><end>7900</end><total>1017</total></kabu>
  <kabu><name>三洋</name><end>958</end><total>2560</total></kabu>
  <kabu><name>日立</name><end>1048</end><total>1580</total></kabu>
  <kabu><name>東芝</name><end>760</end><total>3515</total></kabu>
  <kabu><name>三菱</name><end>702</end><total>1741</total></kabu>
  <kabu><name>NEC</name><end>2080</end><total>1651</total></kabu>
  <kabu><name>富士通</name><end>1683</end><total>2704</total></kabu>
  <kabu><name>セイコー</name><end>409</end><total>33</total></kabu>
</start>

XSLソース

<?xml version="1.0" encoding="Shift_Jis"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  <xsl:template match="/">
    <center><H3><xsl:value-of select="start/top"/></H3></center>
    <xsl:apply-templates select="start"/>
  </xsl:template>
  
  <xsl:template match="start">
  <table border="4">
  <tr><td>
    <h4>出来高を昇順で並べる</h4>
    <table border="2">
      <tr>
      <xsl:for-each select="head">
        <td><xsl:value-of /></td>
      </xsl:for-each>
      </tr>
      <xsl:for-each select="kabu" order-by="number(total)">
        <tr>
        <td><xsl:value-of select="name" /></td>
        <td style="text-align:right"><xsl:value-of select="end" /></td>
        <td style="text-align:right"><xsl:value-of select="total" /></td>
        </tr>
      </xsl:for-each>
    </table>

  </td><td>
    <h4>出来高を降順で並べる</h4>
    <table border="2">
      <tr>
      <xsl:for-each select="head">
        <td><xsl:value-of /></td>
      </xsl:for-each>
      </tr>
      <xsl:for-each select="kabu" order-by="-number(total)">
        <tr>
        <td><xsl:value-of select="name" /></td>
        <td style="text-align:right"><xsl:value-of select="end" /></td>
        <td style="text-align:right"><xsl:value-of select="total" /></td>
        </tr>
      </xsl:for-each>
    </table>
  </td></tr>
  </table>
  </xsl:template>
</xsl:stylesheet>

end(01/1/15)