2017-04-05 61 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