antのxsltタスクでエラー.javaコマンドなら動くのに

2025-05-25

はじめに

スタイルシートを作ってxmlファイルをhtmlに変換する.コマンドライン(javaを使う)では変換できたが,antではエラーになった.

結論

  • antのxsltタスク指定したxsltプロセッサ(saxon)のパスが間違っていた.
  • antをdebugモードで動かすと「xsltプロセッサがない」とメッセージが出ていた(ant -debug|grep saxon).

javaでxmlをhtmlに変換

問題なくhtmlファイルができる.

> java -jar /opt/SaxonHE12-5J/saxon-he-12.5.jar -xsl:style.xsl -s:in.xml -o:out.java.html

antでエラー

java使用時には出なかったエラーが出る.htmlファイルはできるが,javaで変換したhtmlとは内容が異なる.ほしいhtmlではない.

> ant
Buildfile: /c/users/foo/xslt.test/build.xml

xml2html:
  [xslt] Processing /c/users/foo/xslt.test/in.xml to /c/users/foo/xslt.test/out.ant.html
  [xslt] Loading stylesheet style.xsl
  [xslt] : Error! line 9: Illegal attribute 'include-content-type'.

debugモードで動かす.「xsltプロセッサが見つからない」とメッセージが出ていた.

> ant -debug|grep saxon
dropping /opt/SaxonHE12-5/saxon-he-12.5.jar from path as it doesn't exist

正:/opt/SaxonHE12-5J/saxon-he-12.5.jar
誤:/opt/SaxonHE12-5/saxon-he-12.5.jar

パスを直せばOK.

関連ファイル

build.xml(saxonのパスが間違っている)

<project name="xml2html" default="xml2html" basedir=".">
  <target name="xml2html">
    <xslt style="style.xsl" in="in.xml" out="out.ant.html" classpath="/opt/SaxonHE12-5/saxon-he-12.5.jar"/>
  </target>
</project>

in.xml

<root>
  サンプル
</root>

style.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output
    method="html"
    encoding="UTF-8"
    indent="yes"
    include-content-type="no"/>

  <xsl:template match="/">
    <html lang="ja">
      <head>
        <meta charset="UTF-8"/>
      </head>
      <body>
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="root">
    <p><xsl:value-of select="."/></p>
  </xsl:template>
</xsl:stylesheet>

環境

  • Windows 10 Professional
  • WSL2(Ubuntu 24.04.2 LTS)
  • ant 1.10.14
  • OpenJDK 21.0.6
  • SaxonHE 12-5J