2009-11-05 46 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);工作正常。