XML文档转换为字符串

121

如何以最简单的方式获取XML文档(org.w3c.dom.Document)的字符串表示形式?即所有节点都在一行上。

例如,从以下xml:

<root>
  <a>trge</a>
  <b>156</b>
</root>

(这只是一个树形表示,在我的代码中它是一个org.w3c.dom.Document对象,因此我不能将其视为String)

翻译为:

(这个例子只是一种树形表示方式,而在我的代码中实际上是一个org.w3c.dom.Document对象,所以我无法像处理字符串一样对待它)

"<root> <a>trge</a> <b>156</b> </root>"

谢谢!


请问有没有比Java中将XML文档转换为字符串更优雅的方法? - james.garriss
http://iandjava.blogspot.in/2013/06/java-string-to-document-and-document-to.html - Ashish Aggarwal
3个回答

232

假设 doc 是您的 org.w3c.dom.Document 实例:

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
String output = writer.getBuffer().toString().replaceAll("\n|\r", "");

14
如果您添加另一个输出属性:transformer.setOutputProperty(OutputKeys.INDENT, "no");,则replaceAll可能是不必要的。 - bvdb
12
writer.getBuffer().toString()可以简写为writer.toString() - bvdb
@bvdb 两位说得非常好。明确添加 OutputKeys.INDENT 行的另一个优点是,您还可以将其设置为 "yes" 以保留空白 - 如果这是您想要的(在我的情况下,我发现仅删除 replaceAll 并没有使字符串中包含空格)。 - Jonathan Benn
请参见https://dev59.com/CnM_5IYBdhLWcg3waiiJ,了解如何使缩进正常工作的说明。 - Jonathan Benn

2

Xerces仍然没有通过Maven(因此也包括Groovy)进行官方分发,没有可靠的源或JavaDocs,真是荒谬至极,简直让人无语!没有官方的maven支持会使得弃用解决变得更加困难,更新更加麻烦,并且存在安全风险,所以现在在其上有任何依赖都是愚蠢的! - Infernoz

1

首先,您需要消除所有文本节点中的换行符。然后,您可以使用标识转换来输出您的 DOM 树。请查看 TransformerFactory#newTransformer() 的 javadoc。


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