2014-02-27 101 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」,則序列化程序不得添加或刪除任何空格。 –