第一種方式:DOM解析器:函數
DOM是基於樹形結構的的節點或信息片斷的集合,容許開發人員使用DOM API遍歷XML樹、檢索所需數據。分析該結構一般須要加載整個文檔和構造樹形結構,而後才能夠檢索和更新節點信息。Android徹底支持DOM 解析。利用DOM中的對象,能夠對XML文檔進行讀取、搜索、修改、添加和刪除等操做。xml
DOM的工做原理:使用DOM對XML文件進行操做時,首先要解析文件,將文件分爲獨立的元素、屬性和註釋等,而後以節點樹的形式在內存中對XML文件進行表示,就能夠經過節點樹訪問文檔的內容,並根據須要修改文檔——這就是DOM的工做原理。對象
DOM實現時首先爲XML文檔的解析定義一組接口,解析器讀入整個文檔,而後構造一個駐留內存的樹結構,這樣代碼就可使用DOM接口來操做整個樹結構。繼承
因爲DOM在內存中以樹形結構存放,所以檢索和更新效率會更高。可是對於特別大的文檔,解析和加載整個文檔將會很耗資源。 固然,若是XML文件的內容比較小,採用DOM是可行的。接口
經常使用的DoM接口和類:事件
Document:該接口定義分析並建立DOM文檔的一系列方法,它是文檔樹的根,是操做DOM的基礎。內存
Element:該接口繼承Node接口,提供了獲取、修改XML元素名字和屬性的方法。element
Node:該接口提供處理並獲取節點和子節點值的方法。資源
NodeList:提供得到節點個數和當前節點的方法。這樣就能夠迭代地訪問各個節點。開發
DOMParser:該類是Apache的Xerces中的DOM解析器類,可直接解析XML文件。
第二種方式:SAX解析器:
SAX(Simple API for XML)解析器是一種基於事件的解析器,事件驅動的流式解析方式是,從文件的開始順序解析到文檔的結束,不可暫停或倒退。它的核心是事件處理模式,主要是圍繞着事件源以及事件處理器來工做的。當事件源產生事件後,調用事件處理器相應的處理方法,一個事件就能夠獲得處理。在事件源調用事件處理器中特定方法的時候,還要傳遞給事件處理器相應事件的狀態信息,這樣事件處理器纔可以根據提供的事件信息來決定本身的行爲。
SAX解析器的優勢是解析速度快,佔用內存少。很是適合在Android移動設備中使用。
SAX的工做原理:SAX的工做原理簡單地說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束、文檔(document)結束等地方時通知事件處理函數,由事件處理函數作相應動做,而後繼續一樣的掃描,直至文檔結束。
在SAX接口中,事件源是org.xml.sax包中的XMLReader,它經過parser()方法來解析XML文檔,併產生事件。事件處理器是org.xml.sax包中ContentHander、DTDHander、ErrorHandler,以及EntityResolver這4個接口。XMLReader經過相應事件處理器註冊方法setXXXX()來完成的與ContentHander、DTDHander、ErrorHandler,以及EntityResolver這4個接口的鏈接。
經常使用的SAX接口和類:
Attrbutes:用於獲得屬性的個數、名字和值。
ContentHandler:定義與文檔自己關聯的事件(例如,開始和結束標記)。大多數應用程序都註冊這些事件。
DTDHandler:定義與DTD關聯的事件。它沒有定義足夠的事件來完整地報告DTD。若是須要對DTD進行語法分析,請使用可選的DeclHandler。
DeclHandler是SAX的擴展。不是全部的語法分析器都支持它。
EntityResolver:定義與裝入實體關聯的事件。只有少數幾個應用程序註冊這些事件。
ErrorHandler:定義錯誤事件。許多應用程序註冊這些事件以便用它們本身的方式報錯。
DefaultHandler:它提供了這些接LI的缺省實現。在大多數狀況下,爲應用程序擴展DefaultHandler並覆蓋相關的方法要比直接實現一個接口更容易。
第三種方式:PULL解析器:
Android並未提供對Java StAX API的支持。可是,Android附帶了一個pull解析器,其工做方式相似於StAX。它容許用戶的應用程序代碼從解析器中獲取事件,這與SAX解析器自動將事件推入處理程序相反。
PULL解析器的運行方式和SAX相似,都是基於事件的模式。不一樣的是,在PULL解析過程當中返回的是數字,且咱們須要本身獲取產生的事件而後作相應的操做,而不像SAX那樣由處理器觸發一種事件的方法,執行咱們的代碼。
讀取到xml的聲明返回 START_DOCUMENT;
讀取到xml的結束返回 END_DOCUMENT ;
讀取到xml的開始標籤返回 START_TAG
讀取到xml的結束標籤返回 END_TAG
讀取到xml的文本返回 TEXT
PULL解析器小巧輕便,解析速度快,簡單易用,很是適合在Android移動設備中使用,Android系統內部在解析各類XML時也是用PULL解析器,Android官方推薦開發者們使用Pull解析技術。Pull解析技術是第三方開發的開源技術,它一樣能夠應用於JavaSE開發。
PULL 的工做原理:XML pull提供了開始元素和結束元素。當某個元素開始時,咱們能夠調用parser.nextText從XML文檔中提取全部字符數據。當解釋到一個文檔結束時,自動生成EndDocument事件。
經常使用的XML pull的接口和類:
XmlPullParser:XML pull解析器是一個在XMLPULL VlAP1中提供了定義解析功能的接口。
XmlSerializer:它是一個接口,定義了XML信息集的序列。
XmlPullParserFactory:這個類用於在XMPULL V1 API中建立XML Pull解析器。
XmlPullParserException:拋出單一的XML pull解析器相關的錯誤。