xsltファイルに値を渡す

はじめに

antからxsltファイルに値を渡す方法.

結論

  • ant(build.xml)のxsltタスク配下にparamタスクを配置(送り側).
  • xsltファイルにxsl:paramタグを記載(受け側).

サンプル

こんなことをやってみる.

  1. antで現時刻を取得.
  2. xsltに渡す.
  3. テキストファイルに出力.

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

参考