是否有比此代码更优雅的方式将XML文档转换为Java中的字符串?


70

这是当前使用的代码。

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;
        }
    }

Answers:


84

依赖DOM Level3加载/保存

public String getStringFromDoc(org.w3c.dom.Document doc)    {
    DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation();
    LSSerializer lsSerializer = domImplementation.createLSSerializer();
    return lsSerializer.writeToString(doc);   
}

2
Java 7是否提供了另一种选择?
布赖恩2012年

import导入org.w3c.dom.ls.DOMImplementationLS; 导入org.w3c.dom.ls.LSSerializer;
David Portabella '17

13

转换器API是将DOM对象转换为序列化形式(在这种情况下为String)的唯一XML标准方法。作为标准,我指的是用于XML处理的SUN Java XML API

其他替代方法,例如Xerces XMLSerializer或JDOM XMLOutputter方法(是更直接的方法(更少的代码),但是它们是特定于框架的。

我认为您使用的方式是所有方式中最优雅,最便携的。通过使用标准的XML Java API,您可以插入您选择的XML-Parser或XML-Transformer,而无需更改代码(与JDBC驱动程序相同)。还有什么比这更优雅的了吗?


13

这更加简洁:

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.0XMLSerializer是甚至部分rt.jar
Würgspaß

8

您可以使用XOM来做到这一点:

org.w3c.dom.Document domDocument = ...;
nu.xom.Document xomDocument = 
    nu.xom.converters.DOMConverter.convert(domDocument);
String xml = xomDocument.toXML();

1
+ 1,XOM(和其他类似的库)可以真正简化事情。
约尼克,2009年
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.