倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

XML → HTML

XML から XSL によって HTML を生成するためのメモ。 XSLT の仕様を解説するものではありません。

サンプルの XML データ & XSL ファイル


まず、サンプルの XML データとして、以下の様な XML ファイルがあるとします。

locke.xml:

<?xml version="1.0" encoding="UTF-8"?>

<episode title="久遠の瞳" e-title="Eternal Eyes">
    <story>
        惑星ユーノで、エスパーの急死事件が発生。 
        ISC を「引退」していたロックは、ヤマトとともに事件の調査に乗り出す。
        一連の事件の「犯人」は、超能力に反応して体内で起爆するナノマシンサイズの爆弾。
        一連の事件は、すべてのエスパー抹殺を目論む男、
        アーク・マイダスが計画したものだった・・・。
    </story>
    <publication comics="久遠の瞳1-3(MFコミックス)"/>
</episode>

また、上記の XML データに対して、HTML ファイルを生成する以下のような XSL ファイルを用意します。

locke.xsl:

<?xml version="1.0" encoding="UTF-8"?>

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

  <xsl:template match="episode">
    <h1><xsl:value-of select="@title"/></h1>
    <i><xsl:value-of select="@e-title"/></i><br/>
        
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="story">
    <h4>ストーリー</h4>
    <p><xsl:value-of select="text()"/></p>
  </xsl:template>

  <xsl:template match="publication">
    <h4>掲載巻</h4>
    <xsl:value-of select="@comic"/>
  </xsl:template>
</xsl:stylesheet>

このサンプルを使って、XML に XSL を適用する4通りの方法を見ていきましょう。

  1. XML データに内でXSL ファイルを指定する
  2. プロキシ・ファイルを作成
  3. Java プログラムを作成&実行
  4. Ant タスクを作成&実行

XML に XSL を適用する[1] XML データに内でXSL ファイルを指定する


一番簡単なのが、XML データに以下の処理命令(processing instruction)を埋め込むことです:

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

具体的には、locke.xml を以下のように変更します:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="locke.xsl" ?>

<episode title="久遠の瞳" e-title="Eternal Eyes">
    ...

ブラウザで locke.xml にアクセスすれば OK です。 ただし、この方法だと一般性のあるデータに特定の XSL ファイルを結びつけてしまうので、あまりよろしくありません。

XML に XSL を適用する[2] プロキシ・ファイルを作成


次の方法は XML データには修正を加えませんが、XSL ファイルへの修正と新たなプロキシ・ファイルが必要です。

まずはプロキシ・ファイル proxy.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="locke.xsl" ?>
<proxy/>

次に XSL ファイルへの修正:

<?xml version="1.0" encoding="UTF-8"?>

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

  <xsl:template match="/">
    <xsl:apply-templates select="document('locke.xml')/episode"/>
  </xsl:template>

  <xsl:template match="episode">
    ... <!-- 以下は上記と同じ -->

ブラウザで proxy.xml にアクセスすれば OK です。

XML に XSL を適用する[3] Java プログラムを作成&実行


次は XML データ、XSL には修正を加えず、別途 Java プログラムを作成・実行して HTML ファイルを生成する方法です。 一番簡単な Java プログラムはおそらく次のようなものでしょう:

import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class HtmlGenerator {

    public static void main(String... args)
            throws TransformerConfigurationException, TransformerException{
        
        Source xsl = new StreamSource("locke.xsl");
        Transformer t = TransformerFactory.newInstance().newTransformer(xsl);
        
        Source src = new StreamSource("locke.xml");
        Result result = new StreamResult("locke.html");
        
        t.transform(src, result);
    }
}

main メソッドを実行すると生成される locke.html ファイルに、ブラウザでアクセスすれば OK です。

XML に XSL を適用する[4] Ant タスクを作成&実行


最後はビルドツール Ant を用いて変換を行う方法です。 変換のためのタスクのみを書いておきます:

<xslt style="locke.xsl" in="locke.xml" out="locke.html" reloadstylesheet="true"/>

タグ名は「xslt」以外に「style」でもかまいません。 ビルド実行後に生成される locke.html にブラウザでアクセスすれば OK です。

Ant 第2版

Ant 第2版