Xalan が属性値の属性値テンプレートをサポートしているようには見えませんxalan:indent-amount
。
XSLT 1.0 の xsl:output で属性値テンプレートがサポートされていないという警告メッセージが表示されます。どうやらこれらは 1.1 でサポートされているようですが (W3C によって放棄されたため、使用すべきではありません)、Xalan はその特定の属性で AVT のパラメーター値を解決していないようです。
AVT でパラメーター値を使用しようとすると、次のエラーが返されます。
E For input string "{$indent}"
考えられる回避策の 1 つは、エンティティを使用して DTD を生成することです。インデント値をパラメーターとして渡すのではなく、XSLT に DTD を参照させます。必要なインデント値を指定して DTD ファイルを生成し、XSLT を呼び出します。
たとえば、次のような DTD ファイルを作成します (「indent.dtd」という名前を想定します)。
<!ENTITY indent "10" >
次に、次のように XSLT で DTD を参照します (indent.dtd が同じフォルダーにあると仮定するか、パスを調整できます)。
<!DOCTYPE xsl:stylesheet SYSTEM "indent.dtd">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml" omit-xml-declaration="yes"
xalan:indent-amount="&indent;"/>
</xsl:stylesheet>
もう 1 つの回避策は、最初に必要な値で XSLT を生成し、xalan:indent-amount
次に新しく生成された XSLT で XML を変換することです。