如何删除xml文档中的独立属性声明?

时间:2011-12-08 21:42:24

标签: java xml dom

我正在使用Java创建一个xml,然后将其转换为String。 xml声明如下:

DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.newDocument();
doc.setXmlVersion("1.0");

为了将文档转换为String,我包含以下声明:

TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
trans.setOutputProperty(OutputKeys.VERSION, "1.0");
trans.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
trans.setOutputProperty(OutputKeys.INDENT, "yes");

然后我进行转换:

StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();

问题是在XML声明属性中,包含了独立属性,我不希望这样,但我希望显示版本和编码属性:

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

是否有可以指定的财产?

1 个答案:

答案 0 :(得分:42)

根据我的阅读,您可以在创建Document之前在DOMSource上调用以下方法来执行此操作:

doc.setXmlStandalone(true); //before creating the DOMSource

如果您将其设置为false ,则无法控制它显示setXmlStandalone(true) Document OutputKeys。在变换器中,如果您希望输出使用setXmlStandalone(false),则需要“是”或“否”。如果Document standalone="no" Transformer,无论您在{{1}}中设置了什么(如果已设置),您的输出将始终为{{1}}。

阅读thread in this forum