XMLからXSLプロセッサを使ってデータを抽出する(Javaアプリケーション編) JavaからXSLプロセッサを使う今度は,Javaで試してみます.XMLファイルをHTMLファイルに変換するという作業を, XSLプロセッサを使って行ってみます.
ソフトのダウンロード今回は,JavaでXMLを操作するために,
を使用しました. これらを,インターネットからダウンロードしてきて,インストールします. インストールと言っても,ファイル展開,コピーとCLASSPATHの設定だけです. あと,Javaの環境は,JDK1.2.2 (Win32)で試しました. XML Parser for JavaとLotusXSLはIBMのalphaWorksから, JDKはSUNのJava2のページからダウンロードします. CLASSPATHは,例えば
という風にインストールした場合,こんな感じになります 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 先頭の「.;」を忘れないように...これを忘れると,はまります
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にそれほど詳しくなく,勉強中なもので... |