Android中XML解析—概述

來源:互聯網
上載者:User

XML在各種開發中都廣泛應用,Android也不例外。作為承載資料的一個重要角色,如何讀寫XML成為Android開發中一項重要的技能。

在Android中,常見的XML解析器分別為DOM解析器、SAX解析器和PULL解析器,下面將一一詳細介紹。

第一種方式——DOM解析器:

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

由於DOM在記憶體中以樹形結構存放,因此檢索和更新效率會更高。但是對於特別大的文檔,解析和載入整個文檔將會很耗資源。如果XML檔案的內容比較小,採用DOM也是可行的。


DOM的工作原理:

使用DOM對XML檔案進行操作,首先要解析檔案,講檔案分為獨立的元素、屬性和注釋等;後以節點數的形式在記憶體中對XML檔案進行表示,就可以通過節點樹訪問文檔的內容,並根據需要修改文檔;


常用的DoM介面和類:

Document: 該介面定義分析並建立DOM文檔的一系列方法,它是文檔樹的根,是操作DOM的基礎。

Element: 該介面繼承Node介面,提供了擷取、修改XML元素名字和屬性的方法。

Node: 該介面提供處理並擷取節點和子節點值的方法。

NodeList: 提供獲得節點個數和當前節點的方法。這樣就可以迭代地訪問各個節點。

DOMParser:該類是Apache的Xerces中的DOM解析器類,可直接解析XML檔案。


DOM的解析流程:



第二種方法——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並覆蓋相關的方法要比直接實現一個介面更容易

詳見下表:

可知,我們需要XmlReader 以及DefaultHandler來配合解析xml。下面是SAX的解析流程:

第三種方法——PULL解析器:

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解析器相關的錯誤。

PULL的解析流程如下:

執行個體:

Android中XML解析—執行個體

參考文章:

http://blog.csdn.net/liuhe688/article/details/6415593

http://www.2cto.com/kf/201202/121173.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.