XSLTは1999年に仕様が公開され、現在は3.0までバージョンが進んでいます。
にも関わらず長年XSLTでHello Worldをするいい方がありませんでした。
もちろん「xslt hello world」で検索すればいくらでもやり方は出てきます。
しかし、みんなこう思うはずです。
「これじゃない」
普通の人が考えるHello Worldというのは、コマンド一発でコンソールに「Hello World」と出てくるものです。
そうなっていない原因は、XSLTは基本的にXSLにXMLを入力し、何らかのテキストファイルに出力する仕様になっているためです。
じゃあ無理なのか…と思いきや、できます。みんなが
「これだ!」
となる方法を編み出しましたのでご紹介します。
環境
なお今回のやりかたはWindows上で行う方法なので、それ以外は考慮していません。
またJava実行環境が必要です。
コマンド
具体的なコードはGoogleドライブに置いています。
https://drive.google.com/drive/folders/1-JhO33H5BJGvZ895fA4hmfEgYL8cFJvN?usp=sharing
これをZIPでダウンロードし、解凍します。あるいはパソコンからドライブにアクセスします。
そして、コマンドプロンプトでファイル群の入ったディレクトリに移動し、次をコマンドします。
.\xslt.bat helloworld.xsl
すると次が出力されます。
hello world.
または
.\call.bat hellowolrd.xsl
とコマンドしても同じ結果が出てきます。
どうなっているのか?少しずつ見ていきましょう。
コード
まずバッチファイルはこうなっています。
@echo off
if not [%2%]==[] (
set param="%2=%3"
)
java -jar saxon-he-10.8.jar -s:%1 -xsl:%1 -o:out/out.txt %param%
Javaでsaxon-he-10.8.jarを実行していることが分かります。
引数は-sが入力ソース、-xslがXSLTのXSLファイルです。-oでout/out.txtに出力しています。
@echo on
if not [%2%]==[] (
set param="%2=%3"
)
java -jar saxon-he-10.8.jar -it -xsl:%1 %param%
こちらは-itフラグを付けていますね。
次にXSLを見てみましょう。
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:output method="text"/>
<xsl:template match="/" name="xsl:initial-template">
<xsl:message>hello world.</xsl:message>
</xsl:template>
</xsl:stylesheet>
ポイントとなるのが
<xsl:message>hello world.</xsl:message>
という箇所です。ここでコマンドプロンプトに出力しています。
xslt.batのやり方で重要なのは-sと-xslに同じXSLを指定していることです。
XSLはXMLであることを利用し、XSLに自分自身を処理対象とさせることにあります。
私も色々やってきて感じたのですが、入力元となるXMLを用意するのがかなり面倒でした。
しかし、自分自身なら手間はかかりません。
call.batではただ単に名前付きテンプレートを呼び出しています。入力もout.txtの出力も抑えられています。
とても簡明ですね。
他にもいろいろ置いていますが、XMLを処理することを念頭にしたXSLを置いていて、基本となる考え方は「自分自身を処理させる」です。
ここからXSLT3.0ライフを満喫しましょう!