2012-12-30 61 views
2

這是我的XSL電子表格: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> 
+0

您必須使用一個有錯誤的XSLT 2.0處理器。對於所有XSLT 2.0處理器,我都有:Saxon 9.1.05,Saxon 9.4.06EE,XQSharp(XmlPrime)和Altova 2012我得到了縮進結果 –

+0

您使用哪種XSLT 2.0處理器?你如何執行轉換,你如何保存結果並查看它? –

+0

我使用javax.xml.transform運行轉換,並使用所有默認配置。我該如何檢查這個Java庫使用哪個處理器? – zer0stimulus

回答

6

你所看到的實際上是不縮進的結果;縮進的兩行是處理用於縮進源文檔的空白的結果。

如果您要將<xsl:strip-space elements="*" />添加到樣式表中,則在輸出中不會有任何縮進。

縮進實際上並不受XSLT處理器控制,它受控於將輸出序列化爲字符串的任何內容,儘管這通常是通過相同的方法調用完成的。我不能肯定地說,爲什麼xsl:output指令沒有做的工作,但你可以添加到您的Java:

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

和可選,如果你想在多大程度上設置縮進:

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

我不能肯定地說,但它是完全有可能的問題是,要通過縮進量未被設置,並使用0

+0

使用groovy爲我工作。 –

+1

設置工作的縮進量 – DMaguireKane