XMLからXSLプロセッサを使ってデータを抽出する(Javaアプリケーション編)

JavaからXSLプロセッサを使う

 今度は,Javaで試してみます.XMLファイルをHTMLファイルに変換するという作業を, XSLプロセッサを使って行ってみます.

XSL (eXtensible Style Language)
XML用のスタイルシート.
ちなみに,HTML用のスタイルシートはCSSです.

ソフトのダウンロード

 今回は,JavaでXMLを操作するために,

  • XML Parser for Java Ver.2.0.15
  • LotusXSL Ver.0.19.2

を使用しました. これらを,インターネットからダウンロードしてきて,インストールします. インストールと言っても,ファイル展開,コピーとCLASSPATHの設定だけです. あと,Javaの環境は,JDK1.2.2 (Win32)で試しました. XML Parser for JavaとLotusXSLはIBMのalphaWorksから, JDKはSUNのJava2のページからダウンロードします.

CLASSPATHは,例えば

ソフトインストール先ディレクトリ
XML Parser for JavaD:\xml4j_2_0_15
LotusXSLD:\lotusxsl_0_19_2

という風にインストールした場合,こんな感じになります

CLASSPATH=.;D:\xml4j_2_0_15\xml4j.jar;D:\lotusxsl_0_19_2\lotusxsl.jar;D:\lotusxsl_0_19_2\xerces.jar

Windows95/98なら,C:\autoexec.batで

Set CLASSPATH=.;D:\xml4j_2_0_15\xml4j.jar;D:\lotusxsl_0_19_2\lotusxsl.jar;D:\lotusxsl_0_19_2\xerces.jar
と記述すればOKですし,WindowsNTなら,コントロールパネル−システムの「環境」タブで, 環境変数CLASSPATHを追加設定してください.

先頭の「.;」を忘れないように...これを忘れると,はまります


XML,XSLファイルの準備

 これまでに何回か使っているアルバムXMLファイルと, 今回新規で作る変換書式指定用のXSLファイルを準備します.

albums.xml

<?xml version="1.0" encoding="Shift_JIS"?>

<albums>
<album>
<band>AION</band>
<title>Aionism</title>
<comment></comment>
</album>
<album>
<band>ALCATRAZZ</band>
<title>Alcatrazz</title>
<comment>Yngwieのギターが速いぞ</comment>
</album>
<album>
<band>AMORPHIS</band>
<title>Elegy</title>
<comment></comment>
</album>
</albums>

albums.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <HTML>
        <HEAD>
            <TITLE>アルバム</TITLE>
        </HEAD>
        <BODY>
            <TABLE BORDER="1">
                <TR>
                    <TD>バンド</TD>
                    <TD>アルバム名</TD>
                    <TD>コメント</TD>
                </TR>
                <xsl:for-each select="albums/album">
                    <TR>
                        <TD>
                            <xsl:value-of select="band"/>
                        </TD>
                        <TD>
                            <xsl:value-of select="title"/>
                        </TD>
                        <TD>
                            <xsl:value-of select="comment"/>
                        </TD>
                    </TR>
                </xsl:for-each>
            </TABLE>
        </BODY>
    </HTML>
</xsl:template>
</xsl:stylesheet>


変換プログラム

 LotusXSLのサンプルを参考にして作ったのが,下のプログラムです. 本当はもっとシンプルになるのですが,次にやりたいことの関係で, 冗長になっています(わざわざNodeを経由したり).

XSLSample.java

import java.io.*;
import java.net.*;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import org.apache.xalan.xslt.XSLTProcessorFactory;
import org.apache.xalan.xslt.XSLTProcessor;
import org.apache.xalan.xslt.XSLTInputSource;
import org.apache.xalan.xslt.XSLTResultTarget;

public class XSLSample
{
    public static void main( String[] args)
        throws Exception, IOException, MalformedURLException, SAXException
    {
        XSLTProcessor processor = XSLTProcessorFactory.getProcessor();

        XSLTInputSource xmlOrg =  new XSLTInputSource("albums.xml");
        Node doc = processor.getSourceTreeFromInput(xmlOrg);
        XSLTInputSource xml2 = new XSLTInputSource(doc);

        XSLTInputSource stylesheetID = new XSLTInputSource("albums.xsl");

        PrintWriter pw = new PrintWriter( System.out);
        XSLTResultTarget resultTarget = new XSLTResultTarget( pw);
        processor.process(xml2, stylesheetID, resultTarget);
    }
}

これはJavaアプリケーションですので,コマンドプロンプトから

javac XSLSample.java

でコンパイルして,

java XSLSample
で実行します.

実行すると,画面にalbum.xmlを変換した結果のHTMLが表示されます. これを,

java XSLSample >a.html
てな感じでファイルに出力させるようにして,それをブラウザで開くと,

ブラウザでの表示画面

表形式になっていますね. TABLEタグの文法を知っている人なら,albums.xslを検討すれば変換規則はだいたい見当がつくと思います.

投げやりなですが,僕もまだXSLにそれほど詳しくなく,勉強中なもので...


© 2024 KMIソフトウェア