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

use*_*509 33 java xml dom

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

DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.newDocument();
doc.setXmlVersion("1.0");
Run Code Online (Sandbox Code Playgroud)

为了将文档转换为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");
Run Code Online (Sandbox Code Playgroud)

然后我做了转型:

StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();
Run Code Online (Sandbox Code Playgroud)

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

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
Run Code Online (Sandbox Code Playgroud)

有没有可以指定的财产?

Ara*_*ram 46

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

doc.setXmlStandalone(true); //before creating the DOMSource
Run Code Online (Sandbox Code Playgroud)

如果设置它false ,则无法控制它出现与否.所以setXmlStandalone(true)Document.在变压器中如果你想要输出使用你需要的OutputKeys"是"或"否".如果你setXmlStandalone(false)Document你的输出将永远standalone="no"无论你设置什么(如果设置)的Transformer.

阅读此论坛中的主题

  • Transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,“”); 导致在序言之后添加新行 (3认同)
  • 您还可以将变换器的属性 - OutputKeys.STANDALONE设置为true (2认同)
  • @JanHruby 应该设置为“是” (2认同)
  • @Pangea它的工作原理,但是当我这样做时,它不再在prolog之后打印换行了! (2认同)