2012-01-17 53 views
8

我使用SAX解析器解析XML文檔。Android:DOM vs SAX vs XMLPullParser解析?

我想知道這是更好,更快地與DOMSAX解析器XMLPullParser工作。

+0

可能的重複[Android:最佳XML解析庫?](http://stackoverflow.com/questions/3926367/android-best-xml-parsing-library) – 2012-01-17 10:55:26

+3

最好的教程,你有這[這裏]( http://totheriver.com/learn/xml/xmltutorial.html#5.4)。 – 2012-01-17 10:58:01

+0

好教程鏈接@LalitPoptani ......... – Lucifer 2012-01-17 11:00:19

回答

5

它取決於你在做什麼,如果你有非常大的文件,那麼你應該使用SAX解析器,因爲它會觸發事件並釋放它們,沒有內容存儲在內存中,並且使用SAX解析器無法訪問元素一個隨機的方式沒有回頭! ,但Dom允許您訪問xml文件的任何部分,因爲它將整個文件/文檔保存在內存中。希望你回答這個問題。

,如果你想知道哪些最快的解析器Xerces將是最快的,你會發現和SAX解析器應該給你更多的性能比DOM

+0

我正在尋找解析XML文檔的最快方法。 不是大文件。 – Basbous 2012-01-17 11:05:48

+0

@Basbous:SAX或XMLPullParser是最快的,但DOM更容易使用。 – 2015-10-16 18:39:39

1

不同類型的解析器可以分類的一個方面是他們是否需要預先將整個XML文檔加載到內存中。基於文檔對象模型(DOM)的解析器這樣做:他們將XML文檔解析爲樹結構,然後可以遍歷內存中的內容來讀取其內容。這允許您以任意順序遍歷文檔,併產生一些有用的API,這些API可以放在DOM之上,例如XPath,這是一種專門用於從樹中提取信息的路徑查詢語言。單獨使用DOM並不是什麼好處,因爲它的API笨重,即使不需要,也總是將所有內容都讀入內存,這是很昂貴的。因此,在大多數情況下,DOM解析器不是在Android上解析XML的最佳選擇。

有一類解析器不需要預先加載文檔。這些解析器是基於流的,這意味着它們在仍從數據源(Web或磁盤)中讀取XML文檔的同時處理XML文檔。這意味着 您沒有像DOM一樣隨機訪問XML樹,因爲沒有維護文檔的內部表示。流解析器可以進一步相互區分。有推送解析器,在流式傳輸文檔時,會在遇到新元素時回撥給您的應用程序。 SAX解析器屬於這個類。然後是拉解析器,它們更像是迭代器或遊標:這裏客戶端必須明確地要求下一個要檢索的元素。

來源:Android實踐。