下のサンプルから以下のことがわかる(order属性が昇順("ascending")の場合)
●data-type="text"では
・文字列の先頭から比較していき、1文字目が同じ場合は2文字目を比較し、それも同じなら3文字目を・・・。
・スペース、記号、数字、アルファベット、半角カタカナ、全角カタカナ、ひらがな、漢字の順に。
・先頭のスペースは判定されるが表示されない。マイナス記号(-)は無視されるみたい(???)。
・全半角大小英文字では、1文字目、2文字目・・・と全半角大小に関係なく比較していく。文字列全体が同一の場合だけ半角小文字/全角小文字/半角大文字/全角大文字の順に優先する。
・全く同一の場合元文書の記述順に。
●data-type="number"では
・先頭の0は無視される。マイナス記号(-)やコンマ(.)は有効。
・数値以外(文字列、全角数字、数字以外を含んだ数字)は並べ替えされず、元文書の記述順になる。昇順("ascending")では数値より先に先頭から表示され、降順("descending")では逆に数値の後になり末尾から表示される。
[サンプルXML文書を表示](下のフレームに)
XMLソース
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="sort05.xsl"?>
<root>
<title>ソート処理の順序付けのテスト</title>
<data>
<test>123</test>
<test>123</test>
<test>x愛z</test>
<test>xyz</test>
<test>XY</test>
<test>a愛b</test>
<test>A</test>
<test>a</test>
<test>A----Ab</test>
<test>AA</test>
<test>A</test>
<test>a</test>
<test>A Ac</test>
<test>aBc</test>
<test>Abc</test>
<test>aBc</test>
<test>ABC</test>
<test>abc</test>
<test>abc</test>
<test>AB</test>
<test>a B</test>
<test>a bc</test>
<test> xyz(先頭にスペースあり)</test>
<test>a=c</test>
<test>a c</test>
<test>234</test>
<test>-12</test>
<test>0023</test>
<test>0123</test>
<test>12.3</test>
<test>5</test>
<test>13</test>
<test>-0123</test>
<test>1a23</test>
<test>1-23</test>
<test>1@23</test>
<test>-123</test>
<test>1 23</test>
<test>愛x</test>
<test> 愛y(先頭にスペースあり)</test>
<test>あい</test>
<test>アイ</test>
<test>アイ</test>
<test>10</test>
<test>@</test>
<test>・・・・・・・・・・・・・・</test>
</data>
<end>以上です(2003/11/16)</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">
(注)order属性は昇順("ascending")を指定
<table border="1">
<tr><td>data-type="text"の場合</td><td>data-type="number"の場合</td>
</tr>
<tr>
<td><xsl:for-each select="test">
<xsl:sort select="." data-type="text" order="ascending"/>
<xsl:value-of select="."/><br/>
</xsl:for-each></td>
<td><xsl:for-each select="test">
<xsl:sort select="." data-type="number" order="ascending"/>
<xsl:value-of select="."/><br/>
</xsl:for-each></td>
</tr></table>
</xsl:template>
</xsl:stylesheet>
end(03/11/16)