2009-11-05 44 views
18

有什麼辦法告訴Transformer(在使用DOM序列化XML文檔時),忽略獨立屬性?使用Java DOM + Transformer時,省略xml聲明中的獨立屬性。

最好不使用hack,即省略整個XML聲明然後手動預先配置它。

我當前的代碼:

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); //Note nothing is changed 

StreamResult result = new StreamResult(new StringWriter()); 
DOMSource source = new DOMSource(document); 
transformer.transform(source, result); 
return result.getWriter().toString(); 

電流:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<someElement/> 

預期:

<?xml version="1.0" encoding="UTF-8"> 
<someElement/> 

回答

41

想通了..

而是改變變壓器,

我將以下內容添加到文檔對象中。

document.setXmlStandalone(true); 
+3

爲什麼這甚至工作?根據規範: https://www.w3.org/TR/2004/REC-xml-20040204/#sec-rmd 「如果有外部標記聲明但沒有獨立的文檔聲明,則值」no 「 假設。」 這個答案:https://stackoverflow.com/questions/5578645/what-does-the-standalone-directive-mean-in-xml還指出,如果缺少獨立屬性,則假定爲「否」。那麼怎麼來document.setXmlStandalone(true);刪除屬性? – mdzh 2017-06-21 13:58:41

0

您使用哪個Java版本和/或哪個XSLT轉換器?使用Sun Java 1.6.0_16,如果您設置了輸出屬性並且內容也正確,則只能在輸出文檔中設置獨立屬性。

+0

我從Eclipse 4.5(Mars)使用內置的Java 8 SE時遇到了同樣的問題。 – GreenhouseVeg 2017-02-08 12:59:15

2

document.setXmlStandalone(true/false);工作正常。