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解析器。
以上三種解析器,都是非常實用的解析器,我将會一一介紹。我們将會使用這三種解析技術完成一項共同的任務。
我們建立一個項目,項目結構如下:

我在項目的src目錄中放置一個XML文檔persons.xml,内容如下:
然後我們分别使用以上三種解析技術解析文檔,得到一個List<Person>的對象,先來看一下Person.java的代碼:
接下來,就該介紹操作過程了,我們先為解析器定義一個IPersonService接口,每種類型的解析器需要實作此接口。IPersonService.java代碼如下:
好了,我們就該一個一個的實作該接口,完成我們的解析過程。
使用SAX解析器:
PersonServiceImpBySax.java代碼如下:
代碼中,我們定義了自己的事件處理邏輯,重寫了DefaultHandler的幾個重要的事件方法。下面我為大家着重介紹一下DefaultHandler的相關知識。DefaultHandler是一個事件處理器,可以接收解析器報告的所有事件,處理所發現的資料。它實作了EntityResolver接口、DTDHandler接口、ErrorHandler接口和ContentHandler接口。這幾個接口代表不同類型的事件處理器。我們着重介紹一下ContentHandler接口。結構如圖:
這幾個比較重要的方法已被我用紅線标注,DefaultHandler實作了這些方法,但在方法體内沒有做任何事情,是以我們在使用時必須覆寫相關的方法。最重要的是startElement方法、characters方法和endElement方法。當執行文檔時遇到起始節點,startElement方法将會被調用,我們可以擷取起始節點相關資訊;然後characters方法被調用,我們可以擷取節點内的文本資訊;最後endElement方法被調用,我們可以做收尾的相關操作。
最後,我們需要調用SAX解析程式,這個步驟在MainActivity中完成:
界面就兩個按鈕,順便給大家貼上:
點選“readXML”按鈕,将會調用SAX解析器解析文檔,并在TextView中顯示相關資訊,如下圖:
然後再點選“儲存資料”按鈕,将會在該應用包下的files目錄生成一個person_backup.xml檔案:
将persons_backup.xml檔案導出到桌面上,格式化後如圖所示:
使用DOM解析器:
PersonServiceImpByDom.java代碼如下:
然後再MainActivity中隻需改一個地方:
執行結果是一樣的。
使用PULL解析器:
PersonServiceImpByPull.java代碼如下:
然後再對MainActivity做以下更改:
和其他兩個執行結果都一樣。
對于這三種解析器各有優點,我個人比較傾向于PULL解析器,因為SAX解析器操作起來太笨重,DOM不适合文檔較大,記憶體較小的場景,唯有PULL輕巧靈活,速度快,占用記憶體小,使用非常順手。讀者也可以根據自己的喜好選擇相應的解析技術。
==================================================================================================
作者:歐陽鵬 歡迎轉載,與人分享是進步的源泉!