サンプルで覚えるXSLTプログラミング

1.XSLTによるHTMLへの変換

 まずは実際に、XML文書をXSLTのスタイルシートによってHTMLに変換する例をみてみましょう。XMLからHTMLへの変換は、XSLTの典型的な使用例だと言えます。

元になるXML文書

<?xml version="1.0" encoding="Shift_JIS" ?>
<PAGE>
  <EMPLOYEES>
    <EMPLOYEE>
      <EMPNO>1</EMPNO>
      <ENAME>佐野力</ENAME>
      <JOB>President</JOB>
      <HIREDATE>1990-04-01</HIREDATE>
      <SAL>10000</SAL>
      <DEPTNO>10</DEPTNO>
    </EMPLOYEE>
    <EMPLOYEE>
      <EMPNO>50</EMPNO>
      <ENAME>高橋敦子</ENAME>
      <JOB>Director</JOB>
      <MGR>1</MGR>
      <HIREDATE>1991-04-01</HIREDATE>
      <SAL>6000</SAL>
      <DEPTNO>30</DEPTNO>
    </EMPLOYEE>
    <EMPLOYEE>
      <EMPNO>1401</EMPNO>
      <ENAME>小山尚彦</ENAME>
      <JOB>Analyst</JOB>
      <MGR>50</MGR>
      <HIREDATE>1999-09-01</HIREDATE>
      <SAL>3000</SAL>
      <DEPTNO>30</DEPTNO>
    </EMPLOYEE>
  </EMPLOYEES>
</PAGE>

 まずは、XSLTとはどんな処理をするものなのか、処理の内容を説明するための簡単なサンプルとして、上記のXML文書から従業員名のみを取り出してHTML化するスタイルシートを紹介しましょう。その前に、上記のXML文書にスタイルシートを当てる方法として、ここでは上記の2行目に

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

 この1行を入れてXSLTプロセッサに渡すとします。これは、このXML文書を下記のスタイルシートで処理するを指定しています。指定されているスタイルシート「stylesheet1.xsl」が、下記です。

HTML化を行うスタイルシート

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

  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="PAGE">
    <HTML>
    <BODY>
    <xsl:apply-templates/>
    </BODY>
    </HTML>
  </xsl:template>

  <xsl:template match="EMPLOYEES">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="EMPLOYEE">
    <xsl:value-of select="ENAME"/><BR/>
  </xsl:template>

</xsl:stylesheet>

 このスタイルシートをかぶせた実行結果を見てもらいましょう。次のようなHTML文書が生成されます。

<HTML>
<BODY>

  佐野力<BR>
  高橋敦子<BR>
  小山尚彦<BR>

</BODY>
</HTML>

 で、ご想像の通り、Webブラウザでは以下のようになります。

XSLTによって出力されたHTML文書を表示させた

スタイルシートはどのように解釈されるか

 では、スタイルシートがどのようにXML文書をHTML化したか説明していきましょう。まず、スタイルシートの2行目と3行目のタグについて説明しなければなりません。

 “<xsl:stylesheet”で始まる行は、自分自身がスタイルシートであることを定義する行です。一部のXSLTプロセッサでは、ここで定義されているものより古いXSLT仕様を使用しているものもありますが、後述するオラクルのXSQLに含まれるXSLTプロセッサを使う場合は、上記から変更は不要です。“<xsl:output”で始まる行も、日本語をShift_JISで使用する場合は特に変更はいりません。

 それ以後の一連の処理を順に追っていきましょう。

  1. まず、XML文書のドキュメントルート“/”を見つけると、スタイルシート側では“/”テンプレート(<xsl:template match="/">)に入ります。

  2. スタイルシートでは次の行に<xsl:apply-tempaltes/>があります。XML文書の次のタグが<PAGE>なので、スタイルシートの“PAGE”テンプレート(<xsl:template match="PAGE">)に移ります。そこで、スタイルシートから<HTML> <BODY>が出力されます。

  3. スタイルシートでは再び<xsl:apply-templates>タグがあります。XML文書の次の行は<EMPLOYEES>タグですので、こんどはスタイルシートの“EMPLOYEES”テンプレート(<xsl:template match="EMPLOYEES">)へ処理が移ります。

  4. EMPLOYEESテンプレートでは、またもや<xsl:apply-tempaltes/>があります。そこで、XML文書の次のタグ“EMPLOYEE”に従って、スタイルシートの“EMPLOYEE”テンプレート<xsl:template match="EMPLOYEE">へ移ります。

  5. <xsl:value-of select="ENAME"/><BR/>では、“EMPLOYEE”タグの子“ENAME”の値を取ってきて、その後に改行タグ<BR/>をいれるように指示されています。ですからここで「佐野力<BR>」 が出力されます。

  6. これで“EMPLOYEE”テンプレートは終わるので、“EMPLOYEES”テンプレートに戻ります。そしてまたXML文書での2つめの<EMPLOYEE>タグで、“EMPLOYEE”テンプレートが実行され、「高橋敦子<BR>」が出力されます。

  7. 上記の動作をXML文書内のすべての<EMPLOYEE>タグに対して行ったあと、また“EMPLOYEES”テンプレートに戻り、さらに“PAGE”テンプレートに戻り、残りの 「 </BODY> </HTML>」 が出力されます。

  8. “/”テンプレートに戻り、すべての処理を終了します。

 入力のXML文書、XSLTスタイルシート、HTML出力の3つがからんでややこしいかもしれませんが、数をこなせばすぐに理解できるようになります。いまはすべて理解しようとせず、大体の流れをつかむことができればいいでしょう。

 実は、これだけの出力なら下記のようなもっと簡単な方法があります。

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


  <xsl:template match="/">
    <HTML>
    <BODY>
    <xsl:apply-templates select="//EMPLOYEE"/>
    </BODY>
    </HTML>
  </xsl:template>


  <xsl:template match="EMPLOYEE">
    <xsl:value-of select="ENAME"/><BR/>
  </xsl:template>


</xsl:stylesheet>

 このようなXSLTスタイルシートでも、ここでの例のXML文書を使用するかぎり同様の結果を得ることができますが、両者は同値(インプットするXMLが同じ限り同じ出力を出す)ものではありませんので注意してください。

 XSLTスタイルシートの初級編はこれで終わりです。続いて、XSLTのスタイルシートを作成するうえで不可欠なXPathについて、そして、スタイルシートで使うタグや関数について説明していきます。


Index
サンプルで覚えるXSLTプログラミング
1. XMLからHTMLへの変換
スタイルシートはどのように解釈されるか
  2. XPathの基礎知識
XML文書をツリー構造で見る
XPathの表記方法
  3. XSLTエレメントの概要
コラム XSLTプロセッサのインストール
  4. テンプレート系XSLTエレメント
テンプレートの定義
該当するテンプレートの適用
指定されたテンプレートの呼び出し
  5. 変数系XSLTエレメント
変数の定義1
変数の定義2
  6. 出力系XSLTエレメント
該当する表現の値を代入
エレメントノードの生成
属性ノードの生成
テキストノードの生成
コメントノードの生成
PI(processing-instruction)の生成
出力方法の指定
  7. フローコントロール系XSLTエレメント
ループ処理
条件分岐
IF文
  8. その他のXSLTエレメント
他のXSLファイルの読み込み
数の割り当て
  9.XSLT関数の概要
関数の主な分類
  10. 文字列系関数
文字列の連結
文字列の調査
数字のフォーマッティング
空白の除去
……
  11. 数値計算系関数
切り上げ
表現の数を数える
切り下げ
数値型への変換
四捨五入
加算
  12. ノードに関する関数
  13. bool代数系関数
  14. その他の関数
  15. JavaによるXSLTの拡張
Built-inクラスの呼び出し
カスタムメイドの関数を作る


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間