FAQ的なXSLTのサンプル
よく質問されるXSLTのサンプル等
xml関係のメーリングリスト等で質問されるxsltのコーディングのうち、過去に質問されていたもの、定期的によく質問が出てくるもの等のサンプルです。
- IE6.0等では「テスト用xml」を左クリックで表示されるとxml+xsltで変換されたhtml表示が見れます。
- それ以外のブラウザ、またダウンロードは右クリックから保存で行って下さい
- ダウンロード後閲覧するには「*.xml.txt」の拡張子を「*.xml」に変更して下さい
- xsltの拡張子は(IE等では)そのままでもかまいません
(xsltの拡張子を「*.xsl.txt」から「*.xsl」に変更した場合は、*.xml内の<?xml-stylesheet?>による関連づけのhref属性も「*.xsl.txt」から「*.xsl」に変更する)
目次
- 固定回数のループ (2003/05/20 更新)
- 固定列数による表 (2003/05/20 更新)
- 重複の除去 (2003/05/20 更新)
- 順位付け (2003/05/20 更新)
- 文字列置換 (2003/06/06 更新)
- フラットなxmlのグループ化 (2003/06/08 更新)
xsltではタグの出現回数繰り返す「foreach」的なループはありますが、タグの出現回数に関係なく固定回数(10回とか)繰り返す「for i=1 to 10」的なループは標準ではありません。
xsltで実現するにはテンプレートの再帰というトリッキーな手法を使わなければ実現が難しいです。
固定回数のループと同様、列数=タグ出現数の表は簡単に出来ますが、固定列数(例えば3列)で改行・折り返しをする表は標準の機能のみでは実現困難です。
SQLでいうところのDISTINCT的な動作です。
数値順にソートした順位付けです。
同じ数値の場合、1,2,2,4,5...(2位が2人)のようにランク付けします。
1文字→1文字の置き換えであればtranslate()関数で置き換え可能ですが、文字列→文字列や、文字(列)→要素への置き換えは標準ではサポートされていません。
(1)文字列→文字列の置き換え(例.汎用的な置き換えテンプレートを利用した'abc'→'xyz'への置き換え)
(2)文字→要素の置き換え(例.改行→<br/>要素への置き換え)
サンプルのxmlの用に<a>〜<d>(次の<a>の手前)までを1グループとして扱いたい、という目的なのにフラットな構造にxmlを設計してしまうケースがあります。
当然、このようなプログラムにとって「どこからどこまでがグループなのか」という「構造」がわからないxml用のxsltは無意味に複雑になります。
また、「人にも機械にも文書の構造を伝えられる」xmlの利点自体を無くしてしまっています。
(人にはどこからどこまでがグループなのかわかりますが、プログラムにはその構造は理解出来ません。)
そのようなxmlをグループごとに<group>要素で囲むように変形させるxsltのサンプルです。
戻る