XSL:为什么不输出缩进工作?

时间:2012-12-30 14:44:20

标签: xml xslt

这是我的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>

1 个答案:

答案 0 :(得分:6)

你所看到的实际上是根本没有缩进的结果; ARE缩进的两条线是处理用于缩进源文档的空白区域的结果。

如果您要在样式表中添加<xsl:strip-space elements="*" />,则输出中根本不会缩进。

缩进实际上并不是由XSLT处理器控制的,它是由输出到字符串的任何序列化控制的,尽管这通常是通过相同的方法调用完成的。我不能确定为什么xsl:output指令没有完成这项工作,但你可以将它添加到你的java:

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

并且可选地,如果您想设置缩进量:

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

我不能肯定地说,但完全有可能问题是缩进的数量没有被设置,并且使用0。