2017-04-05 58 views
0

我需要在ASCII文本格式文件,我使用下面的代碼XSLT ASCII文本格式

<xsl:output method="xml" indent="yes" encoding="US-ASCII"/> 

但它似乎並沒有工作的任何想法,我怎樣才能使它發揮作用?

+4

更確切地說:「它似乎並沒有工作」是什麼意思? –

+1

我很需要ASCII的動機。幾乎可以肯定,一個將文件處理爲XML的下游進程可以使用UTF-8等文檔編碼,因爲每個XML文檔都是一系列Unicode字符。而且,不理解XML的下游流程應該能夠處理二進制文件。你的場景是什麼? –

回答

1

有可能您的XSLT引擎不支持ASCIIxml輸出方法,然後自動切換到UTF-8UTF-16。您可以使用這個最小的XSLT樣式表進行試用:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" indent="yes" encoding="US-ASCII"/> 
    <xsl:template match="/"> 
    <root>ä</root> 
    </xsl:template> 
</xsl:stylesheet> 

如果通過處理器運行它,撒克遜:

$ saxonb-xslt -s:test.xsl -xsl:test.xsl 

的結果應該是這樣的,如果ASCII支持:

<?xml version="1.0" encoding="US-ASCII"?> 
<root>&#228;</root> 

如果不是的話,你需要一個後處理步驟。 xmllint合理的最新版本可以做到這一點:

xmllint --encode US-ASCII intermediate.xml > final.xml 
+0

規範在哪裏說只允許使用UTF-8和UTF-16? https://www.w3.org/TR/xslt-xquery-serialization/#XML_ENCODING不禁止其他編碼。 –

+1

正好在我鏈接到的地方,第20章「序列化」。請注意,該問題標記爲「xslt-2.0」,所以這是相關的規範。 Quote:「默認值是實現定義的,但對於'xml'和'xhtml'方法,它必須是UTF-8或UTF-16。」 – Boldewyn

+0

其實,閱讀你的鏈接,在我看來,它說的是完全一樣的東西,只要特定實現OP使用可能不支持ASCII。 – Boldewyn