XMLページをIEで表示させよう(基礎編):
テキストの内容によって表示を変えよう その-2

2009年10月18日(日)更新


■XMLドキュメントを表示(8): xsl:if: 内容によって表示を変える

たけち: ちょっと前にxsl:choose, xsl:when, xsl:otherwiseっていうのを使って、XMLテキストの内容を判断して、表示するしないを指定するサンプルを作ったよね。覚えてる?

さらら: あっ、そっ、そういうのあったわね・・・・ (^ ^;

たけち: xsl:ifっていうのを使って、同じようなことができるんだ。それを使って、今回は万葉集XMLドキュメントのなかから、さらら(持統天皇)の歌だけを表示してみよう。

さらら: あら、たけちったら気を使ってくれてるのね。

たけち: まっ、まぁね。さららの歌だけを判断するのは、<poet(作者)>タグ</poet>タグで囲まれたテキスト(内容)が'持統天皇(じとうてんのう)'かどうかを調べればいいんだ。そのときだけ歌の内容を表示するようにすればいいよね。

さらら: うんうん。 (^ ^*

たけち: 図にxsl:if要素の書き方を載せておくね。

xsl:if要素の書き方

さらら: あっ、xsl:chooseのことを少し思い出したわ。この場合も似ているわね。でも、test要素の「判断のための式」ってどんなことを書くのかしら。

たけち: あっ、そこにはXMLドキュメントの要素や属性がどういう値なのかなどを調べるための式を書くんだ。それについては少し詳しく別のところで学んだほうがいいから、ここではひとつの例として見ておくだけにしておこうと思うんだけど。

さらら: そうなの。じゃあ、今回はpoet要素が'持統天皇(じとうてんのう)'かどうかを判断する式をひとつの例として考えておけばいいのね。

たけち: そうだね。じゃ、今回の処理の確認のために次に説明図を載せておくね。

さららの歌だけを表示

たけち: だいたい、雰囲気は分かるよね。

さらら: うん。わかるわ。早くXSLのリストを見てみたいわ。・・・ (^ ^;

たけち: そうだね。じゃあ、次にいつものようにリストを載せるね。

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

  <body>
  <p align="center">万葉集第1巻抜粋: xsl:if 持統天皇(じとうてんのう)の歌を表示する</p>

  <xsl:apply-templates />

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

<xsl:template match="poem">
<table border="0" width="500" align="center">

  <xsl:if test="poet='持統天皇(じとうてんのう)'">
    <tr>
    <th>歌番号: <xsl:value-of select="pno" /></th>
    <th><xsl:value-of select="poet" />の歌</th>
    </tr>
    <tr>
    <td colspan="2">原文: <xsl:value-of select="mkana" /></td>
    </tr>
    <tr>
    <td colspan="2">読み: <xsl:value-of select="yomi" /></td>
    </tr>
    <tr>
    <td><xsl:value-of select="mean" /></td>
    <td>
      <img>
      <xsl:attribute name="src">
      <xsl:value-of select="image" />
      </xsl:attribute>
      </img>
    </td>
    </tr>
  </xsl:if>

</table>

</xsl:template>

</xsl:stylesheet>

さらら: なるほどねぇ。

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

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

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

さらら: へぇ〜、おもしろいわねぇ。確かに、私の歌だけ表示されているわ。。。。。。ひとつだけだから、ちょっと寂しいけど。 (^ ^;

たけち: 巻2の歌もいれればよかったかな?!

さらら: あっ、いいのよ。。。。。ところで、XSLの指定がxsl:choose, xsl:when, xsl:otherwiseっていうのより、なんだかすっきりしているように見えるわ。使い方はどう違うのかしら。

たけち: うん。どっちでもおんなじことができるんだけど、たとえば今回の場合で言うと、額田の歌・さららの歌・人麻呂の歌でそれぞれ表示の仕方を変えたいようなときは、xsl:chooseを使うとすっきり見えるかもね。

さらら: そっかぁ〜。なるほどね。

たけち: じゃあ、今回はここまで。

さらら: はぁい。 (^ ^*

→次回は歌番号が奇数の歌を表示です。。(^ ^;