XSLT基礎編: xsl:includeで他のXSLTスタイルシートを組込む

2007年08月19日(日)更新


他のXSLTスタイルシートの利用

たけち: 今回は、xsl:include要素を勉強しよう。

さらら: xsl:include? includeって、組込む、とかいう意味よね。

たけち: そうそう。xsl:includeは、他のXSLTファイルを部品として使うときに便利なんだよ。

さらら: あっ、そうすると、何度も同じことを書かなくてもすむのね、きっと。。。(^ ^;

たけち: うん。さららの言うとおりだよ。色々なXSLTスタイルシートを作らなくてはならないときには、計画的にやればXSLTスタイルシートを部品化できそうだね。

さらら: そうなのね。

たけち: まず、xsl:includeの書き方をみておこうね。次に載せておくね。

xsl:includeの書き方
■xsl:includeの書き方


サンプルXMLデータ: flowers.xml

さらら: 組込みたいスタイルシートのファイル名をxsl:include要素のhref属性に書けばいいのね。

たけち: そうそう。じゃあ、簡単な例で確認してみようね。

さらら: うん。お願いね。

【flowers.xml】

【flowers.xml】 XMLファイル: 花のデータ

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

<flower family="アケビ科">
    <name>木通(あけび)</name>
    <season>春</season>
    <character>つる性で木に巻きついて、淡い紫色の花をつける。つるが丈夫なので、かごを編むのに使われることもある。</character>
</flower>

<flower family="ユリ科">
    <name>片栗(かたくり)</name>
    <season>春</season>
    <character>紫がかったピンクの花びらの可憐な花を咲かせる。古くから片栗粉の材料として有名。</character>
</flower>

<flower family="キク科">
    <name>ダリア</name>
    <season>夏</season>
    <character>まあるく花を咲かせる。色は、白・赤・ピンク・黄など豊富。</character>
</flower>

<flower family="ナス科">
    <name>瑠璃柳(るりやなぎ)</name>
    <season>夏</season>
    <character>淡い紫色の小さな花をちょっと下向きに咲かせる。</character>
</flower>

<flower family="ユリ科">
    <name>鉄砲百合(てっぽうゆり)</name>
    <season>夏</season>
    <character>まっすぐに伸びた茎の先にらっぱのような白色の花を横向きに咲かせる。</character>
</flower>

<flower family="キク科">
    <name>背高泡立草(せいたかあわだちそう)</name>
    <season>秋</season>
    <character>2メートル程の高さになり、黄色い花を咲かせます。 </character>
</flower>

</flowers>

さらら: 万葉集のデータじゃないのね。

たけち: うん。たまにはちょっと気分を変えて、と思って。xmlデータの内容は分かるよね。


xsl:includeを使ったスタイルシート例

さらら: ええ。花の名前(name)、季節(season)、特徴(chatracter)を示しているのね。

たけち: 各flower要素には、family属性があるね。

さらら: あっ、そうね。

さらら: じゃあ。xsl:includeを使ったスタイルシート例を載せるね。

【composite.xslt】

【composite.xslt】 XSLTファイル: xsl:include要素を含んでいます

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

<xsl:template match="/">
    <html>
        <head><title>xsl:include使用例 ユリ科の植物だけを表示</title></head>
        <body>

        <p>■xsl:include使用例 ユリ科の植物だけを表示</p>
        <table width="600" border="1">
        <tr>
            <th width="30%" bgcolor="silver">花の名前</th>
            <th bgcolor="silver">季節</th>
            <th bgcolor="silver">特徴</th>
        </tr>

        <xsl:apply-templates />

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

<xsl:template match="flower">
    <xsl:call-template name="lily">
    <xsl:with-param name="type">ユリ科</xsl:with-param>
    </xsl:call-template>
</xsl:template>

        <xsl:include href="flowers.xsl" />

</xsl:stylesheet>

さらら: 下のほうにxsl:include要素が書いてあるのね。で、インクルードするスタイルシートはflowers.xslね。

たけち: そうだよ。じゃあ、次にflowers.xslの内容を載せるね。ユリ科の植物だけを表示するようにtypeという名前でパラメタを渡しているからね。

さらら: はい。

インクルードされる【flowers.xslt】

【flowers.xslt】 XSLTファイル: name要素、season要素、character要素内容の抽出

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

<xsl:template name="lily">
    <xsl:param name="type" />
    <xsl:if test="@family=$type">
    <tr>
        <td><xsl:value-of select="name" /></td>
        <td><xsl:value-of select="season" /></td>
        <td><xsl:value-of select="character" /></td>
    </tr>
    </xsl:if>
</xsl:template>

</xsl:stylesheet>


flowers.xmlをIEで表示する

さらら: flower要素のname要素、season要素、character要素内容を取り出して、テーブルのセルとして表示しているのね。

たけち: そうだね。結果は、composite.xslスタイルシートのxsl:include要素の箇所にflowers.xslの内容をそのまま書いたのと同じだね。

さらら: そうね。実際に見てみましょ。

たけち: あっ、それがいいね。

花のデータXMLファイル flowers.xml(上記説明のXSL適用)

flowers.xmlをIEで表示
■flowers.xmlをIEで表示

さらら: あっ、なるほど。。。ユリ科の花の情報がテーブル形式で表示されたわ。

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

さらら: はい。ありがとう! 

→次は、xsl:copy-ofです。・・・ (^ ^;