1

トランスフォーマーがスタイルシートにパラメーターを設定して、必要なインデントのスペース数を指定できるようにしたいと考えています。ここでの回答で@Dimitre Novatchevによるすべての提案を試しましたが、役に立ちませんでした。

<xsl:param name="indent" select="0"/><!-- default indent is 0, but transformer could specify a different value -->
<xsl:output indent="yes" method="xml" omit-xml-declaration="yes" xalan:indent-amount="{$indent}"/> <!-- This does not work -->

indentparamの値を属性に割り当てるにはどうすればよいxalan:indent-amountですか?

4

2 に答える 2

2

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 を変換することです。

于 2013-09-12T00:51:19.413 に答える
1

@Mads Hansen が既に述べたように、Xalan は属性値の属性値テンプレートをサポートしていないようxalan:indent-amountです。

ただし、トランスフォーマー自体のプロパティを設定しても機能することがわかりました。これの良いところは、ファイルを作成/変更する必要がないことです。

transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");

クレジットは @ Flynn1179 に送られます

于 2013-09-12T19:06:43.150 に答える