xsltファイルに値を渡す
はじめに
antからxsltファイルに値を渡す方法.
結論
- ant(build.xml)の
xslt
タスク配下にparam
タスクを配置(送り側). - xsltファイルに
xsl:param
タグを記載(受け側).
サンプル
こんなことをやってみる.
- antで現時刻を取得.
- xsltに渡す.
- テキストファイルに出力.
ant(build.xml)の記載(送り側)
<project name="sample" default="run">
<property environment="env"/>
<target name="run">
<tstamp>
<format property="timestamp" pattern="yyyy/MM/dd HH:mm:ss"/>
<!-- 現時刻を変数timestampに取得 -->
</tstamp>
<echo message="${timestamp}"/>
<xslt style="test.xsl" in="in.xml" out="out.txt">
<param name="timestamp" expression="${timestamp}"/>
<!-- 現時刻をパラメータtimestampを使ってxsltファイルに渡す -->
</xslt>
</target>
</project>
xslt(test.xsl)の記載(受け側)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:param name="timestamp"/>
<!-- antからの値をパラメータtimestampで受ける -->
<xsl:template match="/">
<xsl:value-of select="$timestamp"/>
</xsl:template>
</xsl:stylesheet>
実行結果
# ant
Buildfile: C:\Users\foo\test\build.xml
run:
[echo] 2019/05/06 17:40:01
[xslt] Processing C:\Users\foo\test\in.xml to C:\Users\foo\test\out.txt
[xslt] Loading stylesheet C:\Users\foo\test\test.xsl
BUILD SUCCESSFUL
Total time: 1 second
# cat out.txt
2019/05/06 17:40:01
in.xmlの記載
結果に影響ないので,内容は何でも良い.
<?xml version="1.0" encoding="UTF-8"?>
<root>
this is test.
</root>
antを使わない場合
antを使わずに,Saxonだけで実現するなら,Saxonの引数としてパラメータ名=値
を指定する.
$ java -cp "c:\progra~1\SaxonHE9-9-1-1J\saxon9he.jar;." net.sf.saxon.Transform in.xml test.xsl timestamp="`date`"
Sat May 18 18:15:58 JST 2019
Saxonの引数としてtimestamp="`date`"
を指定.クラスパスc:\progra~1\SaxonHE9-9-1-1J\saxon9he.jar
はSaxonのインストール先に合わせて変更を.
環境
- Windows 10 Pro
- cygwin 2.9.0
- ant 1.10.5
- Saxon-HE 9.9.1.1J
- OpenJDK 12.0.1