Ruby で XSLT スタイルシート未適用の XML ファイルに XSLT スタイルシートを適用する方法についての作業記録です。
0. 前提条件
- Ruby 2.0.0-p247 での作業を想定。
- “libxslt-ruby” という RubyGems ライブラリを使用する。
1. 事前情報
通常、XSLT スタイルシート未適用の XML ファイルに XSLT スタイルシートを適用するには、以下のように XML ファイルに1行を追加すればよいです。HTML ファイルに CSS スタイルシートを適用するのと同じように。
【XML ファイル】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
【XSLT ファイル】
File: test.xsl
1 <?xml version="1.0" encoding="UTF-8" ?>
2
3 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
4 <xsl:output method="html" encoding="UTF-8"/>
5
6 <xsl:template match="/">
7 <xsl:apply-templates/>
8 </xsl:template>
9
10 <xsl:template match="Office">
11 <html lang="ja">
12 <body>
13 <xsl:apply-templates/>
14 </body>
15 </html>
16 </xsl:template>
17
18 <xsl:template match="People">
19 <table>
20 <xsl:apply-templates/>
21 </table>
22 </xsl:template>
23
24 <xsl:template match="Person">
25 <tr>
26 <td><xsl:value-of select="No"/></td>
27 <td><xsl:value-of select="Name"/></td>
28 <td><xsl:value-of select="Birthday"/></td>
29 </tr>
30 </xsl:template>
31 </xsl:stylesheet>
XSLT スタイルシート未適用の XML ファイルは、ブラウザで表示すると以下のようになりますが、
XSLT スタイルシートを適用すると、ブラウザでは以下のように表示できます。
そして、この時の HTML は以下のようになっている。
2. RubyGems ライブラリインストール
Ruby で XSLT スタイルシート未適用の XML ファイル動的に適用させるには、RubyGems ライブラリを使用すると良い。
色々と種類はあるが、今回は “libxslt-ruby” という RubyGems ライブラリを使用する。
以下のようにしてインストールする。
1 2 3 4 |
|
3. XML, XSL ファイル容易
テストで使用する XML ファイルと XSLT スタイルシート(XSL ファイル)を用意する。
先ほど使用したファイルを使用するが、XSLT スタイルシート適用作業は Ruby で行うので、XML ファイルの2行目は削除しておく。
4. Ruby スクリプト作成
テスト用の Ruby スクリプトを以下のように作成する。
File: test_xslt.rb
1 require 'xslt'
2
3 # Create a new XSL Transform
4 stylesheet_doc = LibXML::XML::Document.file('test.xsl')
5 stylesheet = LibXSLT::XSLT::Stylesheet.new(stylesheet_doc)
6
7 # Transform a xml document
8 xml_doc = XML::Document.file('test.xml')
9 html = stylesheet.apply(xml_doc)
10
11 puts html
5. Ruby スクリプト実行
作成した Ruby スクリプトを実行してみる。
HTML が生成され出力される。
1 2 3 4 5 6 7 8 9 10 11 |
|
6. 応用
当方は、この動的に XSLT スタイルシートを適用する方法を利用して、「Ruby on Rails 製の当方ホームページ」で「気象庁防災情報XML」を表示しています。
(XSLT スタイルシートは、気象庁から XML 内容確認用として公開されているが、このサイトでは自作した XSLT スタイルシートを使用している)
この方法が非常に役立っている。
動的に XSLT スタイルシートを適用したい場合には、かなり有効な方法だと思います。(直接文字列操作する方法等もあるでしょうが・・・)
以上。