XML 文档到字符串

Posted

技术标签:

【中文标题】XML 文档到字符串【英文标题】:XML Document to String 【发布时间】:2011-07-24 07:44:36 【问题描述】:

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

例如,来自

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

(这只是一个树表示,在我的代码中它是一个org.w3c.dom.Document 对象,所以我不能把它当作一个字符串)

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

谢谢!

【问题讨论】:

欺骗***.com/questions/315517/… iandjava.blogspot.in/2013/06/… 【参考方案1】:

使用 Apache XMLSerializer

这是一个例子: http://www.informit.com/articles/article.asp?p=31349&seqNum=3&rl=1

你也可以检查一下

http://www.netomatix.com/XmlFileToString.aspx

【讨论】:

Xerces 仍然,可笑的是,没有通过 Maven 正式分发(因此也很时髦),包括没有可靠的来源或 JavaDocs,WTF!没有官方的 maven 支持会使弃用解决变得更加困难,使一致更新更加麻烦,并带来安全风险,所以现在对它有任何依赖是愚蠢的!【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

如果您添加另一个输出属性,replaceAll 可能不是必需的:transformer.setOutputProperty(OutputKeys.INDENT, "no"); writer.getBuffer().toString() 可以是writer.toString() @bvdb 两个优点。显式添加OutputKeys.INDENT 行还有一个额外的优势,因为您也可以将其设置为"yes" 以保留空格——如果这是您想要的(在我的情况下,我发现只需删除replaceAll无法在字符串中包含空格)。 另请参阅***.com/questions/1384802/…,了解如何让缩进正常工作

以上是关于XML 文档到字符串的主要内容,如果未能解决你的问题,请参考以下文章

为啥在加载到 XMLTABLE 时会跳过 XML 文档的第 40,000 个字符?

将字符串 XML 片段转换为 Java 中的文档节点

解析7000个xml文档的Node / Express致命错误

使用 SaxParser 解析 XML 文档的问题 - 2047 个字符限制?

去除标签的xml文档,删除换行符并添加自定义换行符

如果字符串以 <?xml... ?> 部分开头,则将 xml 字符串解析为 xml 文档会失败