如何在Java中将回车符添加到XML输出

11

在Java中,我该如何在生成的XML文件中输出回车符,以便不会将所有内容都放在同一行上?

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element root = doc.createElement("requests");
doc.appendChild(root);
root.appendChild(request);

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(file));
transformer.transform(source, result);

上述代码创建了一个XML文件,但是所有内容都在一行上。


1
请查看此答案是否有帮助:http://stackoverflow.com/questions/6941826/java-1-6-javax-xml-transform-transformer-refuses-to-indent-xml-strings-which-co。 - Dave Newton
1
你有一个用来基于XML的模式吗? - ChadNC
3个回答

17
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");

第一行添加缩进,第二行设置缩进值。


13

这应该会修复问题。

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

1
虽然保存功能正常,但加载创建的文件失败了 - 您如何加载具有此输出属性的 XML 结构。"com.sun.org.apache.xerces.internal.dom.DeferredTextImpl 无法转换为 org.w3c.dom.Element" - Schifty
1
Schifty,你能分享一下你的代码吗?这样人们就可以了解你所讨论的上下文,并尝试在本地运行它。 - skusunam

1
在花费了几个小时处理这个问题之后,我终于找到了解决办法(包括换行符)。之前的答案对我没有用处。
这样,我就可以插入一个新行: org.w3c.dom.Text nodeSeparator = doc.createTextNode("\n\n "); 然后,在我的目标节点之前插入它: parentNode.insertBefore(nodeSeparator, foundNode);

1
很好。在我的情况下,如果我只是编辑现有的xml并使用OutputProperty解决方案,它可能会使文件中出现一些奇怪的缩进。有了这个解决方案,我可以在xml中添加任何想要的换行符。谢谢!我还可以通过doc.createTextNode("\t")进行自己的缩进。 - vilpe89

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接