XMLをIEで表示(基礎編-2) 歌番号が奇数の歌を表示

2004年01月04日(日)更新


■算術演算子

たけち: さて今回は、歌番号が奇数の歌を表示してみようと思うんだ。

さらら: へぇ〜。そんなことできるの? でも、奇数かどうかを調べるって、まさか1か3か5か7かって調べるんじゃないでしょ (^ ^;

たけち: もちろん、そんなことしてられないよね。式には次のような算術演算子が書けるんだよ。

さらら: さっ、算術演算子・・・・ (^ ^;

たけち: あっ、算術演算子っていっても次に載せるようなものだよ。

  • + : たし算
  • - : ひき算
  • * : かけ算
  • div : 割り算
  • mod : 剰余(あまり)

さらら: あら、これだけなの。もっと難しいのかと思ってドキドキして損しちゃった... (^ ^* でも、歌の番号が奇数かどうかってどうやって調べるのかしら?

たけち: 何かを判断する時ってなにを使ったかな?

さらら: え〜っと。。。あっ、そうだ。xsl:ifとかxsl:choose - xsl:whenとかだったわね。?


■xsl:if test="歌番号が奇数"

たけち: そうだね。ここではxsl:ifを使って考えてみようね。次にそこのところだけを書いてみるけど、どう?

  • <xsl:if test="(歌番号 mod 2) = 1">

さらら: えっ〜と・・・・歌番号を2で割ったあまりが1だったら奇数って考えるのね、そうでしょ。

たけち: そうそう。これの代わりに、次のように書いてもいいんだよ。

  • <xsl:if test="(歌番号 mod 2) != 0">

さらら: う〜ん・・・・ !=ってなぁに?

たけち: !=は、NOT Equal(等しくない)っていう意味なんだ。だから、歌番号を2で割ったあまりが0と等しくなかったら奇数って考えているんだよね。

さらら: そっか〜。。。ねぇ、もっと具体的にサンプルで見せて欲しいわ.....(^ ^*


■xsl:if test="歌番号が奇数"

たけち: じゃぁ、具体的に説明するから、次にXMLデータのサンプルとXSLTスタイルシートを載せるね。今回のXMLデータでは、pno(歌番号)poemの属性にしてあるからね。

xmlデータ 【mod.xml】

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="mod.xsl"?>
<manyosyu>
  <poem url="m0007.html" pno="7">
    <mkana>金野乃 美草苅葺 屋杼礼里之 兎道乃宮子能 借五百礒所念</mkana>
    <poet>額田王(ぬかたのおおきみ)</poet>
    <yomi>秋の野の、み草刈り葺(ふ)き、宿れりし、宇治の宮処(みやこ)の、仮(かり)廬(いほ)し思ほゆ</yomi>
    <image>image/m0007.jpg</image>
    <mean>秋の野のみ草を刈って屋根を葺(ふ)いて、泊まった宇治(うじ)の宮処(みやこ)の仮の宿のことを思い出します。</mean>
    </poem>

・・・・・途中省略してます・・・・・

  <poem url="m0037.html" pno="37">
    <mkana>雖見飽奴 吉野乃河之 常滑乃 絶事無久 復還見牟</mkana>
    <poet>柿本人麻呂(かきのもとのひとまろ)</poet>
    <yomi>見れど飽かぬ、吉野の川の、常滑(とこなめ)の、絶ゆることなく、またかへり見む
    </yomi>
    <image>image/m0037.jpg</image>
    <mean>何度見ても飽きることの無い吉野の川の常滑(とこなめ)のように、絶えること無く何度も何度も見にきましょう。</mean>
  </poem>

</manyosyu>

xsl:ifの説明図

XSLTスタイルシート 【mod.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基本サンプル</title>
  <link rel="stylesheet" type="text/css" href="manyo.css" />
  </head>

  <body>
  <p align="center">万葉集第1巻抜粋: 奇数番号の歌を表示</p>

  <xsl:apply-templates />

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

<xsl:template match="manyosyu/poem">

<xsl:if test="(@pno mod 2) = 1">

<table border="0" width="500" align="center">
  <tr>
  <th>
  <a>
  <xsl:attribute name="href">
  http://www6.airnet.ne.jp/manyo/main/one/<xsl:value-of select="@url" />
  </xsl:attribute>
  歌番号: <xsl:value-of select="@pno" />
  </a>
  </th>
  <th><xsl:value-of select="poet" />の歌</th>
  </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>
</table>

</xsl:if>

</xsl:template>

</xsl:stylesheet>

さらら: @pnoってところでpnoという属性を見ているのよね?!

たけち: そうだね。xslスタイルシートの<xsl:if test="(@pno mod 2) = 1">@pnoは、poemの属性pnoの内容を示しているんだ。詳しくは、XSLとXPathの関係を参考にしてね。

たけち: じゃあ、このXSLテキストを"mod.xsl"というファイルにして、実際にどうなるか見てみようね。次のテキストをクリックしてみて。

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

歌番号が奇数の歌を表示

さらら: ねぇ。数の扱いって他には無いの?

たけち: うん。それが意外にあるんだよね。それについては、関数のところで勉強しようね。

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

→次回はmode属性を使った例: 簡単な目録を表示するです。。(^ ^;