1

次のような 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 が尊重されていれば、クラッジは不要です。

4

0 に答える 0