2011-11-30 81 views
11

我必須將org.w3c.dom.Document轉換爲java.lang.String。我找到了兩種可能的方法,一種使用org.w3c.dom.ls.LSSerializer,另一種使用javax.xml.transform.Transformer。我有下面的每個樣品。LSSerializer vs Transformer將xml序列化爲字符串

任何人都可以告訴我哪種方法是首選嗎?

public String docToStringUsingLSSerializer(org.w3c.dom.Document doc) { 
    DOMImplementationRegistry reg = DOMImplementationRegistry.newInstance(); 
    DOMImplementationLS impl = (DOMImplementationLS) reg.getDOMImplementation("LS"); 
    LSSerializer serializer = impl.createLSSerializer(); 
    return serializer.writeToString(doc); 
} 

public String docToStringUsingTransformer(org.w3c.dom.Document doc) { 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    StringWriter stw = new StringWriter(); 
    transformer.transform(new DOMSource(doc), new StreamResult(stw)); 
    return stw.toString(); 
} 
+0

你有沒有發現任何機會答案現在?我自己也想知道同樣的問題。 – apines

+0

我沒有得到任何答案,並找不到任何文章喜歡一個或另一個。但是,我在序列化String時發現的幾乎所有文章和帖子都使用javax.xml.Transform,因此它似乎是總體首選方法。儘管如此,我還是使用org.w3c.dom.ls.LSSerializer,並且我沒有任何堅實的理由可以爲之付出代價。我喜歡使用org.w3c.dom軟件包獲得的「一站式購物」的感受。到目前爲止,我沒有任何負面的使用這種方法報告。所以我認爲我的答案是「他們都很好」。 –

回答

4

有幾點考慮:

  1. 的LSSerializer通常被認爲是快於變壓器
  2. 儘管如此,它在很大程度上取決於實施。 A 變壓器基於SAX將會有不錯的表現。還有不同的實現者(Xalan,Xerces,...)。
  3. 很容易檢查哪個系統更好。用複雜的XML設計一個簡單的測試用例。以循環的方式運行它,用時間檢查(Syste.getCurrentMilliseconds或其他),並且你已經得到了答案。
  4. 一些不錯的答案包括:
+0

感謝您的照亮答案。另一個與我有關的問題是我稱之爲「放棄可能性」,圖書館或API的創建者可能會放棄它,不再提供更新作爲底層技術(在本例中爲JDK)的更改。您是否認爲被拋棄或棄用的可能性較高?謝謝 –