由于迁移到java 1.7 Xml文档元素不会缩进

joh*_*ith 5 java xml parsing dom transform

我正在尝试缩进由Transformer生成的XML.除了第一个节点 - 文档元素之外,所有DOM节点都按预期缩进.document元素不会在新行中开始,只是在XML声明之后立即生成.

当我转移到java 1.7时会出现这个错误,当使用java 1.6或1.5时,它不会发生.

我的代码:

ByteArrayOutputStream s = new OutputStreamWriter(out, "utf-8");

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","4");

transformer.transform(new DOMSource(doc), new StreamResult(s));
Run Code Online (Sandbox Code Playgroud)

输出:

<?xml version="1.0" encoding="UTF-8"?><a>
       <b>bbbbb</b>
 </a>
Run Code Online (Sandbox Code Playgroud)

谁知道为什么?

顺便说一下,当我添加属性

transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
Run Code Online (Sandbox Code Playgroud)

它按预期工作,但xml声明已更改,它现在也具有独立属性,我不想更改xml声明..

joh*_*ith 12

好 ,

我在Java API中找到了这样的:

如果指定了doctype-system属性,则xml输出方法应在第一个元素之前输出文档类型声明.

所以我使用了这个属性

 transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "yes");
Run Code Online (Sandbox Code Playgroud)

它解决了我的问题,改变了我的xml声明.

谢谢.

  • 正在寻找这几天:) (2认同)