2011-07-04 19 views
3

我有一個可處理大量XML數據的應用程序。所以,我想問問你哪個是在java中處理XML的最佳API。今天,我正在使用W3,爲了提高性能,我想遷移到一些API。 我從0製作XML,進行大量轉換,導入數據庫(mysql,mssql等),從數據庫導出到html,修改這些XML等等。用於獲得最佳性能的XML API

JDOM是最佳選擇嗎?你知道其他一些好於JDOM? 我聽說(通過閱讀網頁)關於javolution。有人用它?

你推薦我哪個API?

+2

每個API都有弱點和優勢。這些優勢通常是通過修復其他API的弱點而引起的。你需要哪些優勢? –

回答

2

如果你有大量的數據,主要是避免一次加載到內存中(因爲它會佔用大量的內存,並且因爲它可以防止你重疊IO和處理)。不幸的是,我相信大多數DOM和DOM類庫(如DOM4J)就是這樣做的,所以它們不適合高效地處理大量的XML。

而是使用流式API,比如SAX或StAX。根據我的經驗,StAX通常更易於使用。

還有其他API試圖爲您提供SAX性能方便的DOM。 Javolution可能是一個;另一個是VTD-XML。但說實話,我發現StAX很容易處理 - 它基本上是一個花哨的流,所以你只是想,就像你從一個流中讀取文本文件一樣。

您可能會嘗試的一件事是將JAXB與StAX結合使用。這個想法是,您使用StAX流式傳輸文件,然後使用JAXB解組它內部的塊。例如,如果您正在處理一個Atom供稿,您可以打開它,讀取標題,然後在一個循環中一次一個地編組entry元素。如果你的格式由一系列獨立的元素組成,如Atom;對於像XHTML這樣更豐富的東西來說,它將毫無用處。你可以在JAXB reference implementationa guy's blog post中看到這個例子。

0

嗯,我知道了大多數開發人員和我自己,我們使用dom4J,也許如果你有,你可以寫一個小performancetest利用兩個框架的時候,那麼你會看到其中的差別。我prefere dom4j。

1

答案取決於哪些性能方面對您的應用程序很重要。一個因素是您是否正在處理大型XML文檔。

對於解析,基於DOM的方法無法很好地適應大型文檔。如果您需要解析大型文檔,那麼非DOM解析器(如使用SAX和StAX的解析器)將會更快速,資源更少。但是,如果您需要在解析後轉換XML,請使用XSL或DOM API,無論如何您都需要內存中的整個文檔。

爲了從代碼創建XML,StAX爲此提供了一個很好的API。由於該方法基於流,因此可以很好地編寫非常大的文檔。

相關問題