xml教學 - 有沒有比這個代碼更優雅的方式將XML文檔轉換為Java中的String?




xml値取得 java解析xml (5)

這是當前使用的代碼。

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

您可以使用XOM來執行此操作:

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

依賴DOM Level3加載/保存

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

這更簡潔一點:

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

變換器API是從DOM對象轉換為序列化形式(在本例中為String)的唯一XML標準方法。 作為標準,我的意思是SUN Java XML API for XML Processing

其他替代方法(如Xerces XMLSerializer或JDOM XMLOutputter是更直接的方法(代碼更少​​),但它們是特定於框架的。

在我看來,你使用的方式是最優雅,最便攜的。 通過使用標準XML Java API,您可以在不更改代碼的情況下插入您選擇的XML-Parser或XML-Transformer(與JDBC驅動程序相同)。 還有比這更優雅的東西嗎?


另一個帶有Optional.ofNullable Java 8彈性解決方案

Set<Foo> mySet = Optional.ofNullable(myList).map(HashSet::new).orElse(null);






java xml