XMLページをIEで表示させよう(基礎編): 作者名順に表示しよう

2000年10月29日(日)更新


■サンプルXMLテキストを表示する(8): 歌を表示(作者名順に表示しよう)

たけち: 今回は、テキストの表示順序の指定を勉強しよう。

さらら: あら、そんなこともできるの?!

たけち: うん。でも、JavaScriptとかでの処理じゃなくって、XSLでの指定だからそんなにたいしたことはできないけどね。「歌を作者名の順に並べる」程度のことはできるんだ。今回は、それをやってみるね。

さらら: へぇ〜。

たけち: 「並べ替え」の指定はorder-byっていうのを使うんだ。

  • order-by="+XXX" .......XXXは並べ替えのための順序をみるための「タグ名」を指定します
  • order-by="-XXX"

さらら: 「+」とか「-」ってなあに?

たけち: 「+」は「小さいほうから大きいほうへ並べる」ってこと。「-」はその逆で「大きいほうから小さいほうへ並べる」ってこと。

さらら: ふぅ〜ん。。。。でも、「作者名」の小さい順とか大きい順ってどういうことなの? まさか、優れた歌人の順とかってことないよね?

たけち: あっ、う〜ん。。。 (^ ^; これは、文字コード順ってこと。今回の場合は、"shift-JIS"を使っているからその文字コード順になるんだよ。それでも、同じ作者名のものはまとまって見ることができるからそれなりにメリットはあるんだよ。

さらら: あっ、そうね。「年代順」なんかだとおもしろいわね。

たけち: そうだね。じゃあ、いつものようにどんな風にするのかを図に載せておくね。

作者名順に並べ替えて表示する

さらら: 図でみると面倒そうだけど、XSLではどこにどう書けばいいのかしら。

たけち: これまでのXSL指定でずっと使っているxsl:for-each select="歌"のところにorder-by="+作者"を追加するだけでいいんだよ。じゃぁ、今回は、そこのところだけのソースを目立つように下に書いておくね。

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">
<html>
<head>
<title>たのしいXML: XSL基本サンプル-6</title>
<link rel="stylesheet" type="text/css" href="manyo.css" />
</head>

<body>
<p align="center">万葉集第1巻抜粋: 作者名順に表示する</p>

<xsl:apply-templates select="万葉集/巻" />

</body>
</html>
</xsl:template>

<xsl:template match="万葉集/巻">

<table  border="0" width="500" align="center">

<xsl:for-each select="歌"  order-by="+作者">
<tr>
<th>
歌番号: <xsl:value-of select="歌番号" />
</th>
<th><xsl:value-of select="作者" />の歌</th>
</tr>
<tr>
<td colspan="2">読み: <xsl:value-of select="読み" /></td>
</tr>
<tr>
<td><xsl:value-of select="意味" /></td>
<td>
<img>
<xsl:attribute name="src">
<xsl:value-of select="イメージ" />
</xsl:attribute>
</img>
</td>
</tr>
</xsl:for-each>

</table>
</xsl:template>

</xsl:stylesheet>

さらら: あら。。。本当にorder-by="+作者"を追加するだけでいいのね。

たけち: 意外と簡単だね。じゃあ、このXSLテキストを"basic6.xsl"というファイルにして、実際にどうなるか見てみようね。次のテキストをクリックしてみて。あっ、そうそう。いつもと同じように、2行目は
<?xml-stylesheet type="text/xsl" href="basic6.xsl"?>
として、"basic6.xml"というファイルを作成しているからね。また、"image"フォルダーを作って、そこに必要なイメージファイルを入れてあるからね。

万葉集第1巻抜粋のXMLファイル basic6.xml(上記説明のXSL適用)

こんな風に表示されます・・・

さらら: こうして作者順に見るのも楽しいわね。私の歌もも少し入れてくれるとうれしかったけど・・・

たけち: そっ、そうだね。。。。じゃぁ、今回はこれでおしまい。

さらら: うん。ありがと。 (*^ ^*)

テキストの内容によって表示を変えよう その-2へ...(^ ^)v


注 1) 並べ替え(ソート)を数値で行いたい場合には、numberを使います。たとえば、「歌番号の大きいほうから並べる」には、次のように指定します。

<xsl:for-each select="歌" order-by="-number(歌番号)">

注 2) ここでのサンプルで使っているorder-by="XXXX"は、Microsoft社の独自仕様ですのでご承知おきください。