XMLをIEで表示(基礎編) xsl:with-param

2009年10月25日(日)更新


xsl:with-paramでtemplateにデータを渡しましょう

さらら: templateにパラメタを渡す、って??

たけち: 前回、それぞれ一回しか使わないのに、xsl:call-templateを使ってたけど、二ヶ所以上で使うときには、二ヶ所ともまったく同じことをするんじゃなくって、それぞれちょっとだけやることが違うってことがあるよね。

さらら: うんうん。そうね。同じ内容を作るときでも、それぞれのフォントを違うようにしたいとか、ねっ。

たけち: そうそう。そんなときに、xsl:call-templateといっしょに、指定したテンプレート(template)にパラメタを渡して、テンプレートがそのパラメタによって生成する内容を変えたりさせることができるんだ。

さらら: へぇ〜、そうなんだ。すごいわね。

たけち: そのパラメタを渡すのに、xsl:with-paramを使うんだ。いつものようにxsl:with-paramの使い方を図で説明するね。

xsl:with-paramの説明図

さらら: なんだか難しそうね。。。。xsl:with-paramってxsl:call-templateの中で使われるのね。

たけち: それに、呼ばれる方のtemplateの最初に、xsl:paramでデフォルト値を書くんだよ。

さらら: デフォルト値って、xsl:with-paramでパラメタの指定が無いときに、このtemplateの中で使われる値のことね。

たけち: そうそう。デフォルト値のこと、よく覚えていたね。

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


xsl:with-paramのサンプルの説明

たけち: じゃあ、今回のサンプルではどんなことをするのか説明するね。今回は、歌の番号のところと歌の読みのところの両方に「万葉集の歌のページ」へのリンクを作ってみようね。

さらら: どんなリンクにするの?

たけち: 次の図に、表示したい画面とそれぞれのリンクの内容を載せておくね。

サンプルでのリンク生成の説明図

さらら: こんな風にリンクを作るのね。あっ、それで、それぞれのリンクを作るためにtemplatecontentsという名前(name)のパラメタで渡すのね。

たけち: そうなんだ。だいたい分かったところで、XSLサンプルがどうなっているかを図で説明するね。

xsl:with-paramサンプルの説明図

たけち: どう? だいたい分かるだろ?!

さらら: えぇ、分かるわ。

たけち: じゃあ、今回のサンプルのXMLテキストとのXSLスタイルシートを次に載せるね。XMLテキストは、前回と構成は同じだけど、ちょっとだけ歌を入れ替えてみたからね。


xsl:with-paramのサンプルXMLテキストとXSLスタイルシート

xsl:with-param サンプルXMLテキスト

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="with-param.xsl"?>

<manyosyu>

<poem pno="0007">
  <mkana>金野乃 美草苅葺 屋杼礼里之 兎道乃宮子能 借五百礒所念</mkana>
  <poet>額田王(ぬかたのおおきみ)</poet>
  <yomi>秋の野の、み草刈(か)り葺(ふ)き、宿(やど)れりし、宇治(うじ)の宮処(みやこ)の、仮廬(かりいほ)し思(おも)ほゆ</yomi>
  <mean>秋の野のみ草を刈って屋根を葺(ふ)いて、泊まった宇治(うじ)の宮処(みやこ)の仮の宿のことを思い出します。</mean>
</poem>

<poem pno="0008">
  <mkana>熟田津尓 船乗世武登 月待者 潮毛可奈比沼 今者許藝乞菜</mkana>
  <poet>額田王(ぬかたのおおきみ)</poet>
  <yomi>熟田津(にきたつ)に、船(ふな)乗りせむと、月待てば、潮もかなひぬ、今は漕(こ)ぎ出(い)でな</yomi>
  <mean>熟田津(にきたつ)で、船を出そうと月を待っていると、いよいよ潮の流れも良くなってきた。さあ、いまこそ船出するのです。</mean>
</poem>

<poem pno="0020">
  <mkana>茜草指 武良前野逝 標野行 野守者不見哉 君之袖布流</mkana>
  <poet>額田王(ぬかたのおおきみ)</poet>
  <yomi>茜(あかね)さす、紫野行き標野(しめの)行き、野守(のもり)は見ずや、君が袖振る</yomi>
  <mean>(茜色の光に満ちている)紫野、天智天皇御領地の野で、あぁ、あなたはそんなに袖を振ってらして、野守が見るかもしれませんよ。</mean>
</poem>

<poem pno="0023">
  <mkana>打麻乎 麻續王 白水郎有哉 射等篭荷四間乃 珠藻苅麻須</mkana>
  <poet>作者不明</poet>
  <yomi>打ち麻(そ)を、麻続(をみの)の王(おほきみ)、海人(あま)なれや、伊良虞(いらご)の島の、玉藻(たまも)刈ります</yomi>
  <mean>麻続(をみの)の王(おほきみ)さまは海人(あま)なのでしょうか、(いいえ、そうではいらっしゃらないのに、)伊良虞の島の藻をとっていらっしゃる・・・・・ </mean>
</poem>

<poem pno="0024">
  <mkana>空蝉之 命乎惜美 浪尓所濕 伊良虞能嶋之 玉藻苅食</mkana>
  <poet>作者不明</poet>
  <yomi>うつせみの、命を惜しみ、波に濡れ、伊良虞(いらご)の島の、玉藻(たまも)刈(か)り食(は)む</yomi>
  <mean>命惜しさに、波に濡れながら、伊良虞(いらご)の島の藻をとって食べるのです・・・ </mean>
</poem>

<poem pno="0028">
  <mkana>春過而 夏来良之 白妙能 衣乾有 天之香来山</mkana>
  <poet>持統天皇(じとうてんのう)</poet>
  <yomi>春過ぎて 夏来たるらし 白妙(しろたえ)の 衣干したり 天(あめ)の香具山(かぐやま)</yomi>
  <mean>春が過ぎて、夏が来たらしい。白妙(しろたえ)の衣が香久山(かぐやま)の方に見える。</mean>
</poem>

</manyosyu>

xsl:with-paramサンプル用xslスタイルシート

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

<xsl:variable name="manyo_url">http://www6.airnet.ne.jp/manyo/main/one/m</xsl:variable>

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

  <body>
  <p align="center">万葉集第1巻抜粋: <strong>xsl:with-param</strong>でtemplateにデータを渡す</p>

  <xsl:apply-templates />

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

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

<table border="0" width="500" align="center">
  <tr>
  <th>
    <xsl:call-template name="link_url">
    <xsl:with-param name="contents">
    <xsl:value-of select="concat('歌番号: ', @pno)" />
    </xsl:with-param>
    </xsl:call-template>
  </th>
  <th><xsl:value-of select="poet" /></th>
  </tr>
  <tr>
  <td>
    <xsl:call-template name="link_url">
    <xsl:with-param name="contents">
    <xsl:value-of select="yomi" />
    </xsl:with-param>
    </xsl:call-template>
  </td>
  <td>
  <xsl:call-template name="image" />
  </td>
  </tr>
</table>
</xsl:template>

<xsl:template name="link_url">
  <xsl:param name="contents">内容指定無し</xsl:param>
  <xsl:element name="a">
  <xsl:attribute name="href">
  <xsl:value-of select="concat($manyo_url, @pno, '.html')" />
  </xsl:attribute>
  <xsl:value-of select="$contents" />
  </xsl:element>
</xsl:template>


<xsl:template name="image">
  <xsl:element name="img">
  <xsl:attribute name="src">
  <xsl:value-of select="concat('image/m', @pno, '.jpg')" />
  </xsl:attribute>
  </xsl:element>
</xsl:template>

</xsl:stylesheet>

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

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

xsl:with-paramを使ってリンク表示

さらら: やっとこれでxsl:call-templateの使い方が分かったわ。XSLって本当にいろいろなことができるのね。。。。。

たけち: うん。まだまだ説明したりないこともあるけれど、基本的なことは説明できたと思うよ。

さらら: じゃぁ、XSLサンプルの説明は終わりなの?

たけち: うん。必要と思われることはこれからもやっていこうと思うけれどね。

さらら: は〜い、ありがと。(^ ^* 

→次は、xsl:outputです。・・・ (^ ^;