XSLTのソート結果行に番号を振りたい | |
XML文書内のデータをXSLTを利用してソートした結果、各行に番号を1から振りたいのですが、どうすればいいでしょうか |
回答/富士ソフトABC株式会社 技術調査室
2001/3/13
XSLTを利用してXML文書内のデータをソートし、各データに番号を1から付けるのであれば、下記の命令を応用して記述することで番号付けできます。
<xsl:value-of select="position()"/> |
position()はコンテキストの位置を表わします。この場合、処理を行うカレントノードの位置を表わしています。
もっとさまざまな表現を使用して番号付けを行うには、XSLTのnumber要素を使用し、番号を振りたい個所に以下のように記述することで実現できます。
<xsl:number value="position()" format="1"/> |
この記述は基本的なもので、1から順に番号付けを行っています。value="position()" 属性を指定しないと、ソート前の順番で番号付けされてしまいます。formatに使用できる値には、以下のものがあります。
設定値 | 概要 |
1 | 標準的な序数 (1、2、3……) |
01 | 頭に任意の数の0を付した序数(01、02、03……、001、002、003……) |
A | 大文字のアルファベット(A-Z、AA-ZZ) |
a | 小文字のアルファベット(a-z、aa-zz) |
I | 大文字のローマ数字(I、II、III、IV……) |
i | 小文字のローマ数字(i、ii、iii、iv……) |
ア | 全角カナの五十音 (ア、イ、ウ、エ、オ……) |
イ | 全角カナのイロハ(イ、ロ、ハ、ニ……) |
また 、番号を“()” や“[]” で囲むこともできます。
<xsl:number value="position()" format="(1)"/> |
““{}”はエラーにはなりませんが、内容は無視され“1”が指定された場合と同じ表示になります。
ソートした結果に番号を付ける場合のXSLファイルの記述例を以下に示します。
<xsl:template match="doc"> <tr>
<!-- 番号付け:i,ii,iii,vi
と番号を付ける --> →value="position()"
で、ソート後のデータの順番で番号を付けます。番号は 1, 2, 3 ではなく、i, ii, iii で付けています。
</td> |
詳細はW3Cの勧告「XSLT 1.0」(http://www.w3.org/TR/xslt)の 7.7 項を参照してください。日本語訳はインフォテリアなどにあります(http://www.infoteria.com/jp/contents/xml-data/REC-xslt-19991116-jpn.htm)。
[サンプルファイル]
sort_sample.xml:XML データファイル
sort_style.xsl:ソートと番号付けを行うスタイルファイル (xsl:number
を使用)
「Ask XML Expert」 |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|