XML文档到字符串


104

获取XML文档(org.w3c.dom.Document)的String表示的最简单方法是什么?那就是所有节点都将在一行上。

例如,从

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

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

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

谢谢!



Answers:


207

假设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", "");

12
replaceAll如果添加另一个输出属性,则可能没有必要:transformer.setOutputProperty(OutputKeys.INDENT, "no");
bvdb

10
并且writer.getBuffer().toString()可以只是writer.toString()
bvdb

@bvdb都很好。显式添加该OutputKeys.INDENT行还有一个额外的优势,因为您还可以将其设置"yes"为保留空白-如果这是您想要的(在我的情况下,我发现仅删除行replaceAll并不能在其中包含空白串)。
乔纳森·本

另请参见stackoverflow.com/questions/1384802/…,以获取有关如何使缩进正确工作的说明
Jonathan Benn,


1

首先,您需要摆脱所有文本节点中的所有换行符。然后,您可以使用身份转换来输出DOM树。在中查看javadoc TransformerFactory#newTransformer()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.