2

これは私の XSL スプレッドシートです。

<xsl:stylesheet version="2.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output indent="yes" method="xml" encoding="utf-8" omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <xsl:element name="outer">
               <xsl:apply-templates select="elements"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="element1">
       <xsl:element name="output1">
            <xsl:element name="output1.5" />
       </xsl:element>
    </xsl:template> 

    <xsl:template match="element2">
       <xsl:element name="output2"/>
    </xsl:template> 

</xsl:stylesheet>

入力 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<elements>
    <element1>value1</element1>
    <element2>value2</element2>
</elements>

出力は、出力 XML 階層に従ってインデントされません。これは実際の出力です (output1.5 と output1 が適切にインデントされていないことに注意してください):

<outer>
    <output1>
<output1.5/>
</output1>
    <output2/>
</outer>
4

1 に答える 1

6

表示されているのは、実際にはまったくインデントしていない結果です。インデントされている 2 行は、ソース ドキュメントのインデントに使用された空白を処理した結果です。

スタイルシートに追加<xsl:strip-space elements="*" />すると、出力にまったくインデントが表示されません。

インデントは実際には XSLT プロセッサによって制御されるのではなく、出力を文字列にシリアル化するものによって制御されますが、これは通常、同じメソッド呼び出しによって行われます。命令が機能しなかった理由ははっきりとは言えxsl:outputませんが、これを Java に追加できます。

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

オプションで、インデントする量を設定する場合:

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

確かなことは言えませんが、インデントする量が設定されておらず、0 を使用していることが問題である可能性は十分にあります。

于 2012-12-31T13:12:07.920 に答える