2014-02-27 46 views
0

我需要通过支持XSLT 2.0的变换器生成一个格式良好的XML文件。 我发现Saxon支持XSTL 2.0,但我无法弄清楚如何生成具有良好缩进的XML。Java中的撒克逊indedentatation

在标准的Java变压器,我用这个代码:

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
DOMSource source = new DOMSource(doc); 
StreamResult result = new StreamResult(new File("myOutput.xml")); 
transformer.transform(source, result); 

实际上效果很好,但如果我切换到撒克逊用:

TransformerFactory transformerFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null); 

然后压痕不工作了。 我还阅读了文档,似乎我将不得不使用saxon:indent-spaces属性,但似乎只能在Saxon的PE版本中使用。但是,它表示默认值是3,所以它应该默认缩进。

无论如何,你知道一种用Saxon(免费版)生成一个XML格式良好的XML吗?

谢谢

+0

你能举一个你正在处理的输入和输出XML的例子吗?它是否有任何缩进开头,或任何带有前导或尾随空白的文本节点? –

回答

0

您的代码适用于我;进行调查,我们需要看到的输入和输出,您使用的是撒克逊版本等的全部细节

顺便说一句,请注意使用与撒克逊一个DOMSource的比使用StreamSource的或更慢高达十倍的SAXSource。除非您需要为其他令人信服的理由构建DOM,否则不要这样做。

+0

似乎它是根中的xml:space =“preserve”标记。有趣的是,使用标准变压器时,问题不会出现。 – user1923631

+0

按“标准”我认为你的意思是“非标准”。该标准明确指出,如果树中存在xml:space =“preserve”,则序列化程序不得添加或删除任何空格。 –