有没有比这段代码更优雅的方式将 XML 文档转换为 Java 中的字符串?
Posted
技术标签:
【中文标题】有没有比这段代码更优雅的方式将 XML 文档转换为 Java 中的字符串?【英文标题】:Is there a more elegant way to convert an XML Document to a String in Java than this code? 【发布时间】:2010-09-23 20:25:45 【问题描述】:这是当前使用的代码。
public String getStringFromDoc(org.w3c.dom.Document doc)
try
DOMSource domSource = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);
writer.flush();
return writer.toString();
catch(TransformerException ex)
ex.printStackTrace();
return null;
【问题讨论】:
【参考方案1】:你可以使用XOM:
org.w3c.dom.Document domDocument = ...;
nu.xom.Document xomDocument =
nu.xom.converters.DOMConverter.convert(domDocument);
String xml = xomDocument.toXML();
你可以使用Jsoup:
org.jsoup.helper.W3CDom converter = new W3CDom();
String html = converter.asString( domDocument );
【讨论】:
+1,XOM(和其他类似的库)确实可以简化事情。【参考方案2】:这更简洁一点:
try
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
return result.getWriter().toString();
catch(TransformerException ex)
ex.printStackTrace();
return null;
否则你可以使用像 Apache 的 XMLSerializer 这样的库:
//Serialize DOM
OutputFormat format = new OutputFormat (doc);
// as a String
StringWriter stringOut = new StringWriter ();
XMLSerializer serial = new XMLSerializer (stringOut,format);
serial.serialize(doc);
// Display the XML
System.out.println(stringOut.toString());
【讨论】:
我喜欢第二种变体。对于 JRE 1.8.0,XMLSerializer
甚至是 rt.jar
的一部分【参考方案3】:
依赖DOM Level3 Load/Save:
public String getStringFromDoc(org.w3c.dom.Document doc)
DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation();
LSSerializer lsSerializer = domImplementation.createLSSerializer();
return lsSerializer.writeToString(doc);
【讨论】:
Java 7 是否提供了另一种选择? 导入导入 org.w3c.dom.ls.DOMImplementationLS;导入 org.w3c.dom.ls.LSSerializer;【参考方案4】:转换器 API 是从 DOM 对象转换为序列化表单(在本例中为字符串)的唯一 XML 标准方法。作为标准,我的意思是 SUN Java XML API for XML Processing。
Xerces XMLSerializer 或 JDOM XMLOutputter 等其他替代方法是更直接的方法(代码更少),但它们是特定于框架的。
在我看来,您使用的方式是最优雅和最便携的。通过使用标准 XML Java API,您可以插入您选择的 XML-Parser 或 XML-Transformer,而无需更改代码(与 JDBC 驱动程序相同)。还有什么比这更优雅的吗?
【讨论】:
以上是关于有没有比这段代码更优雅的方式将 XML 文档转换为 Java 中的字符串?的主要内容,如果未能解决你的问题,请参考以下文章
有没有更优雅的方式将项目安全地添加到 Dictionary<> 中?
更优雅的方式来处理 UIActionSheet 中的取消按钮单击?