当前位置:  开发笔记 > 编程语言 > 正文

有没有比这个代码更优雅的方法将XML文档转换为Java中的String?

如何解决《有没有比这个代码更优雅的方法将XML文档转换为Java中的String?》经验,为你挑选了4个好方法。

这是当前使用的代码.

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

ykaganovich.. 82

依赖DOM Level3加载/保存:

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

Java 7提供了另一种选择吗? (2认同)


Fernando Mig.. 13

变换器API是从DOM对象转换为序列化形式(在本例中为String)的唯一XML标准方法.作为标准,我指的是用于XML处理的 SUN Java XML API.

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

在我看来,你使用的方式是最优雅,最便携的.通过使用标准XML Java API,您可以在不更改代码的情况下插入您选择的XML-Parser或XML-Transformer(与JDBC驱动程序相同).还有比这更优雅的东西吗?



1> ykaganovich..:

依赖DOM Level3加载/保存:

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


Java 7提供了另一种选择吗?

2> Fernando Mig..:

变换器API是从DOM对象转换为序列化形式(在本例中为String)的唯一XML标准方法.作为标准,我指的是用于XML处理的 SUN Java XML API.

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

在我看来,你使用的方式是最优雅,最便携的.通过使用标准XML Java API,您可以在不更改代码的情况下插入您选择的XML-Parser或XML-Transformer(与JDBC驱动程序相同).还有比这更优雅的东西吗?



3> digitalsanct..:

这更简洁一点:

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());



4> toolkit..:

您可以使用XOM来执行此操作:

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

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有