次のような Ant xslt タスクがあります。
<xslt
basedir="${target.dir}"
destdir="${target.dir}"
style="${target.dir}/event.xsl"
includes="*.xml"
excludes="*Common.xml"
extension=".tmp.log"
force="yes"
>
</xslt>
event.xsl 内に次のディレクティブがあります。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:redirect="http://xml.apache.org/xalan/redirect"
xmlns:java="java"
extension-element-prefixes="redirect"
>
[other stuff to set $filename]
<redirect:write select="$filename">
Xalan-J の場合、これは期待どおりに機能し、生成されたファイルはdestdirに書き込まれます。
Xalan-J 依存関係を削除して、Java 1.4+ でデフォルトの XSLTC を使用しようとしています。XSLTC は、このコンテキストではselectを尊重しません。代わりに、提案はそれを次のものに置き換えることでした:
<redirect:write file="{$filename}"
ファイルがdestdirではなく現在の作業ディレクトリに書き込まれることを除いて、これは正しく機能します。.tmp.logファイルは destdir に正しく配置されます。
XSLTC のredirect:writeによってdestdirが無視される理由を知っている人はいますか? そして、それを修正する方法は?
そのディレクトリのbuild.xmlを作成し、Antタスク「ant」を使用してdestdirを作業ディレクトリとして呼び出すなど、いくつかの回避策があります。または、Ant で有効な chdir にフォークして、同様の目的を達成することもできます。しかし、Xalan-J の下にあったように destdir が尊重されていれば、クラッジは不要です。