首頁 >後端開發 >XML/RSS教程 >效率最高的xml解析方式

效率最高的xml解析方式

黄舟
黄舟原創
2017-02-25 14:22:262501瀏覽

XML在各種開發中都廣泛應用,Android也不例外。作為承載資料的一個重要角色,如何讀寫XML成為Android開發中重要的技能。今天就由我向大家介紹一下在Android平台下幾種常見的XML解析和創建的方法。

在Android中,常見的XML解析器分別為SAX解析器、DOM解析器和PULL解析器,下面,我要為大家做詳細的介紹。

 

SAX解析器:

SAX(Simple API for XML)解析器是一種基於事件的解析器,它的核心是事件處理模式,主要是圍繞著事件來源以及事件處理器來運作的。當事件來源產生事件後,呼叫事件處理器對應的處理方法,一個事件就可以處理。在事件源呼叫事件處理器中特定方法的時候,也要傳遞給事件處理器對應事件的狀態訊息,這樣事件處理器才能夠根據提供的事件資訊來決定自己的行為。

SAX解析器的優點是解析速度快,佔用記憶體少。非常適合在Android行動裝置中使用。

DOM解析器:

DOM是基於樹狀結構的節點或資訊片段的集合,允許開發人員使用DOM API遍歷XML樹、檢索所需資料。分析該結構通常需要載入整個文件和建構樹形結構,然後才可以檢索和更新節點資訊。

由於DOM在記憶體中以樹狀結構存放,因此檢索和更新效率會更高。但是對於特別大的文檔,解析和載入整個文檔將會很耗資源。

PULL解析器:

PULL解析器的運作方式和SAX類似,都是基於事件的模式。不同的是,在PULL解析過程中,我們需要自己取得產生的事件然後做對應的操作,而不是像SAX那樣由處理器觸發一種事件的方法,執行我們的程式碼。 PULL解析器小巧輕便,解析速度快,簡單好用,非常適合在Android行動裝置中使用,Android系統內部在解析各種XML時也是用PULL解析器。

 

在Android中,首推當然就是pull解析器了。 PULL解析器小巧輕便,解析速度快,簡單易用,非常適合在Android行動裝置中使用,Android系統內部在解析各種XML時也是用PULL解析器,Android官方推薦開發者使用Pull解析技術。 Pull解析技術是第三方開發的開源技術,它同樣可以應用於JavaSE開發。

PULL 的工作原理:

XML pull提供了開始元素和結束元素。當某個元素開始時,可以呼叫parser. nextText從XML文件中擷取所有字元資料。當解析到一個文件結束時,自動產生EndDocument事件。

常用的XML pull的介面和類別:

XmlPullParser:此解析器是一個在org.xmlpull.v1中定義的解析功能的介面。

XmlSerializer:它是一個接口,定義了XML資訊集的序列。

XmlPullParserFactory:這個類別用於在XMPULL V1 API中建立XML Pull解析器。

XmlPullParserException:拋出單一的XML pull解析器相關的錯誤。

PULL解析器的運作方式和SAX類似,都是基於事件的模式。

不同的是,在PULL解析過程中傳回的是數字,而我們需要自己取得產生的事件然後做對應的操作,而不是像SAX那樣由處理器觸發一種事件的方法,執行我們的程式碼:

讀取到xml的宣告回傳 START_DOCUMENT; 結束回傳 END_DOCUMENT ; 開始標籤返回 START_TAG;

結束標籤返回 END_TAG; 文字返回 TEXT。

最後對這3個解析技術做個比較與總結: 
對Android的行動裝置而言,因為裝置的資源比較寶貴,記憶體是有限的,所以我們需要選擇適合的技術來解析XML,這樣有利於提高存取的速度。

DOM在處理XML檔案時,將XML檔案解析成樹狀結構並放入記憶體中處理。當XML檔案較小時,我們可以選DOM,因為它簡單、直覺。

SAX則是以事件作為解析XML檔案的模式,它將XML檔案轉換成一系列的事件,由不同的事件處理器決定如何處理。 XML檔案較大時,選擇SAX技術是比較合理的。雖然程式碼量有些大,但是它不需要將所有的XML檔案載入到記憶體中。這樣對於有限的Android記憶體更有效,而且Android提供了一個傳統的SAX使用方法以及一個方便的SAX包裝器。 使用Xml類,會比使用 SAX來得簡單。

XML pull解析並未像SAX解析那樣監聽元素的結束,而是在開始處完成了大部分處理。這有利於提早讀取XML文件,可以極大的減少解析時間,這種優化對於連接速度較漫的行動裝置而言尤其重要。對於XML文件較大但只需要文件的一部分時,XML Pull解析器則是更有效的方法。

 以上就是效率最高的xml解析方式 的內容,更多相關內容請關注PHP中文網(www.php.cn)!


#
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn