2012-01-13 74 views
3

我有下面的XML:保留屬性之間的空白在XSLT轉換

<?xml version="1.0"?> 
<products> 
    <product at1="a" 
      at2="b" 
      at3="c"> 
    </product> 
</products> 

及以下XSLT:

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

    <xsl:template match="@*|node()"> 
      <xsl:copy> 
        <xsl:apply-templates select="@*|node()"/> 
      </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

從理論上說,XSLT應離開輸入XML不變。然而,輸出處理後我得到的是:

<?xml version="1.0"?> 
<products> 
    <product at1="a" at2="b" at3="c"> 
    </product> 
</products> 

有我的方式,我可以防止變壓器從格式化屬性之間的間距。我明白,輸入和輸出xml在功能上都是相同的,但爲了便於閱讀,我想保留每行格式的屬性。如果它的事項,我使用Ubuntu的xsltproc的做這樣的轉換:

xsltproc -o test2.xml test.xslt test.xml 
+0

非常相似:http://stackoverflow.com/questions/4617993/how-to-preserve-whitespace-within-an-elements-opening-tag-in-xslt – mzjn 2012-01-13 16:41:09

+0

http://stackoverflow.com/questions/ 1265255 /在xml序列化期間放置每個屬性的新行 - – 2012-01-13 16:51:28

回答

3

不,不是標準的XML/XSLT工具。

該信息不是XML信息集的一部分,並且在XML解析器讀取XML時將丟失。因此,不能保存在輸出中。

您需要修改輸出以使用其他格式來應用該類格式。

+0

在我開始編寫自己的xml解析器之前,能否推薦任何可以讀取xml的工具或庫,同時保留所有空白? – 2012-01-13 18:14:10

+1

@AlexSpurling我也有類似的問題給你。但是,爲什麼不只是在第一次使用XSLT之後執行腳本(例如python)來根據需要格式化縮進?這可能比重寫整個XML解析器快很多:)希望能幫到你! – ForceMagic 2012-04-11 22:22:16