XSLTスタイルシートプログラミング(宣言)

前回は、XML文書をXSLTスタイルシートで見やすいように加工してHTML文書を表示させ、さらに、表示されたHTML文書にCSSを適用できるようにXSLTスタイルシートを作成しました。

今回は、前回作成したXSLTスタイルシートのプログラミング方法について順を追って解説していきます。

まず、XSLTスタイルシートで変換する元となるXML文書を確認しましょう。

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="sample01.xsl" ?>
<ゲーム所持リスト>
  <ゲーム情報 管理コード="0001">
    <ゲームタイトル>DARK SOULS Ⅱ</ゲームタイトル>
    <購入日>2013/3/14</購入日>
    <購入価格>4000</購入価格>
  </ゲーム情報>
  <ゲーム情報 管理コード="0002">
    <ゲームタイトル>モンスターハンター4G</ゲームタイトル>
    <購入日>2014/10/11</購入日>
    <購入価格>5800</購入価格>
  </ゲーム情報>
  <ゲーム情報 管理コード="0003">
    <ゲームタイトル>ドラゴンクエストヒーローズ 闇竜と世界樹の城</ゲームタイトル>
    <購入日>2015/2/26</購入日>
    <購入価格>5800</購入価格>
  </ゲーム情報>
</ゲーム所持リスト>

上記XML文書を任意のフォルダに「sample01.xml」という名前で保存してください。

XML文書をXSLTスタイルシートと関連付ける

上記のようなXML文書は前回までの記事で作成していますのでもう見慣れているかもしれませんが、ここでは、XML文書とXSLTスタイルシートを関連付けるための下記一文が新しく登場していることに着目してください。

<?xml-stylesheet type="text/xsl" href="sample01.xsl" ?>

XSLTスタイルシートを使用するためには、XML文書と関連付けをしてやらなくてはいけません。変換元となるXML文書に対して、どのXSLTスタイルシートを使用するのかを指定します。<?xml-stylesheet?>タグは以下の属性を持っています。

type属性
スタイルシートの形式を指定します。
XSLTスタイルシートを使用する場合は「text/xsl」と記述します。

href属性
スタイルシートが格納されたパス(場所)を指定します。
XML文書と同じフォルダに格納している場合はファイル名のみ記述します。

この一文を追加することで、指定されたXSLTスタイルシートで変換処理をし、その結果がWebブラウザに返されるようになります。ここで重要なのは、href属性さえ変更すれば、別のXSLTスタイルシートが適用でき、XML文書はそれ以外変更する必要がない点です。

同じXML文書でも、XSLTスタイルシートを変えれば、まったく異なった出力結果が得られます。これは、データとスタイルを分離した利点のひとつです。

XSLTスタイルシート

続いて、XSLTスタイルシートを作成していきます。
テキストエディタで以下のように記述して下さい。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" />
  <xsl:template match="/">
    <html>
    <head>
    <title><xsl:text>ゲーム所持リスト</xsl:text></title>
    </head>
    <h1><xsl:text>ゲーム所持リスト</xsl:text></h1>
    <table>
    <tr>
        <th><xsl:text>ゲームタイトル</xsl:text></th>
        <th><xsl:text>購入日</xsl:text></th>
        <th><xsl:text>購入価格</xsl:text></th>
    </tr>
    <xsl:for-each select="ゲーム所持リスト/ゲーム情報">
    <tr>
        <td><xsl:value-of select="ゲームタイトル" /></td>
        <td><xsl:value-of select="購入日" /></td>
        <td><xsl:value-of select="購入価格" /></td>
    </tr>
    </xsl:for-each>
    </table>
    </html>
  </xsl:template>
</xsl:stylesheet>

上記XSLTスタイルシートを「sample01.xml」を保存した同フォルダに「sample01.xsl」という名前で保存してください。XSLTスタイルシートの拡張子は「.xsl」となり、XML文書の「.xml」と区別します。

記述に間違えがなければ、「sample01.xml」を開くと関連付けられたXSLTスタイルシート「sample01.xsl」により変換されたHTML文書がWebブラウザ上に表示されます。その際、開くファイルはXSLTスタイルシート(sample01.xsl)ではなくXML文書(sample.xml)の方であることに注意してください。

XSLTスタイルシートの宣言

XSLTもXML構文に従って記述します。
まず、文頭でバージョンや文字コードを宣言します。(その際、文字コードはXSLTファイルの文字コードと合わせる必要があります。例えば、「sample01.xsl」をUTF-8で作成したら、encoding属性もUTF-8を指定します。)

2行目の<xsl:stylesheet>要素は、XSLTスタイルシートのルート要素にあたります。そのため全てのスタイル定義は、この<xsl:stylesheet>要素配下に記述します。xmlns:xsl属性は、「<xsl:~」ではじまる要素がどういった規則に従うかを指定するためのオプションです。バージョン1.0の場合は、以下の記述で固定となります。

http://www.w3.org/1999/XSL/Transform

これらの記述はXSLTスタイルシートを作成するときの「おまじない」と考えておけば良いです。ここをあまり難しく考える必要はありません。

XSLT出力方法の宣言

XSLTはXML文書をその他の形式に変換するためのものです。何に変換するかは以下の記述で指定します。

<xsl:output method="html" encoding="UTF-8" />

XML文書をHTML文書に変換する場合はmethod属性に「html」と指定します。
これにより、XSLTスタイルシートの出力を受けた方は、出力形式がHTMLで、文字コードがUTF-8であると識別できるようになります。

今回のサンプルではHTML文書に変換していますが、当然、XSLTによりその他の形式にも変換できます。

<xsl:output>要素の書式

<xsl:output method=”出力形式(xml | html | text)”
【version=”バージョン”】
【encoding=”文字コード”】
【indent=”インデント有無(yes | no)】
【media-type=”MIMEタイプ(text/htmlなど)”】 />

※【 】で囲った属性は省略可能。

次回は、XSLTスタイルシートのメインである変換ルールの記述部分について解説してきます。