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