FAQ的なXSLTのサンプル


よく質問されるXSLTのサンプル等

xml関係のメーリングリスト等で質問されるxsltのコーディングのうち、過去に質問されていたもの、定期的によく質問が出てくるもの等のサンプルです。

目次

  1. 固定回数のループ (2003/05/20 更新)
  2. 固定列数による表 (2003/05/20 更新)
  3. 重複の除去 (2003/05/20 更新)
  4. 順位付け (2003/05/20 更新)
  5. 文字列置換 (2003/06/06 更新)
  6. フラットな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のグループ化

サンプルのxmlの用に<a>〜<d>(次の<a>の手前)までを1グループとして扱いたい、という目的なのにフラットな構造にxmlを設計してしまうケースがあります。
当然、このようなプログラムにとって「どこからどこまでがグループなのか」という「構造」がわからないxml用のxsltは無意味に複雑になります。
また、「人にも機械にも文書の構造を伝えられる」xmlの利点自体を無くしてしまっています。
(人にはどこからどこまでがグループなのかわかりますが、プログラムにはその構造は理解出来ません。)
そのようなxmlをグループごとに<group>要素で囲むように変形させるxsltのサンプルです。
戻る