先に紹介したリスト3のように、複数レコードを記録したXMLの内容を画面表示するには、XSLの書き方もそれに合わせて変えなければなりません。と言うより、本来は複数レコードが記述されているのが当たり前ですから、以下に紹介する書き方の方が一般的です。
- レコードの件数分繰り返す -
データベースのレコードセットのように基本の構造を複数回繰り返すXMLでは、それを表示するXSLの書き方も少し変わってきます。通常、すべてのレコードを同じ体裁で表示しますから、その中の個々のフィールドの値は
項目名:内容
といった形となるでしょう。これがフィールド数の分繰り返されて1件のレコードが表示され、さらにその形態がレコード数の分だけ繰り返されます。
- パターンマッチングでフィールドを取り出す -
このように、複数の項目を区切って表示させたい場合、パターンマッチングを使って項目ごとに表示方法を指定できます。
<xsl:template match="/">
:
<xsl:apply-templates select="//*" />
:
</xsl:template>
“//*”はルート要素以下のすべての階層のすべての項目を示します。xslテンプレートの記述はこれだけです。“//*”の箇所を書き換えれば、特定のレコードだけを抽出することもできます(本記事のテーマから離れていくので、ここでは割愛します)。
その後、それぞれの項目(子要素)について個別に表示方法を指定します。このとき、HTMLタグが使用できます。
「氏名」要素を太字で表示するなら、以下のように記述します。
<xsl:template match="氏名"> |
|
(1) |
<DIV>
●氏名:<B> |
|
(2) |
<xsl:value-of/> |
|
(3) |
</B>
</DIV>
</xsl:template>
(1) |
パターンマッチングで「氏名」要素だけを取り出す |
(2) |
HTMLの<B>タグで太字を指定 |
(3) |
該当する要素の値を表示 |
リスト6は、先のmembers02.xmlとmembers03.xmlの内容(中身自体はどちらも同じです)をブラウザで表示するためのXSMです。「番号」の要素だけが太字になります。
画面1が、それをInternet Explorerで表示させた結果です。
リスト6:複数のレコードを表示するスタイルシート~members02.xsl
|
|
|