Android學習xml解析大全之SAX和DOM

來源:互聯網
上載者:User

標籤:android   blog   http   java   使用   strong   檔案   資料   

  隨著android的學習解析xml成為了很多朋友面臨的問。想學習如何解析xml就要先瞭解xml是什麼。

XML稱為可延伸標記語言 (XML)(Extensible Markup Language),由標準通用標記語言 (SGML)(SGML:Standard Generalized Markup Language)發展而來,允許開發人員自訂標籤,可以實現標籤和內容的有效分離。

  與HTML不同,XML不再側重於資料如何表現,而是更多的關注資料如何儲存和傳輸。因此,XML逐漸演變成為一種跨平台的資料交換格式。通過使用XML,開發人員可以在不同平台、不同系統之間進行資料交換。除此之外,還可以使用XML作為設定檔,將應用程式狀態儲存到XML檔案中,而無須使用關係型資料庫。

目前常用的兩種解析xml的方式:DOM SAX
二者區別:
     DOM 通過標準介面將文檔讀入記憶體,
優點是可以隨機訪問xml中每個元素。
缺點是一次性讀入整個文檔到記憶體中,整個DOM樹常駐記憶體,導致系統開銷過大。
     SAX 採用時間驅動機制來解析xml文檔。通過開發人員編寫的事件監聽器來擷取XML資訊。
優點是解析方式佔用記憶體小處理速度快。
缺點是採用順序模式來讀取xml,因此無法做到隨機讀取文檔中的任意元素。
    JAXP(java API for xml)JAXP是建立在DOM和SAX之上的一個抽象層,它既沒有提供解析XML的新方法,也沒有對DOM和SAX進行任何擴充,僅僅只是提供了一種原廠模式,允許應用程式在不同的XML解析器之間切換。

SAX解析器

  JAXP為SAX解析器提供了以下的2組API。

  (1)XMLReader和XMLReaderFactory:XMLReaderFactory工程類的creatXMLReader()靜態方法用於建立XMLReader。

  (2)SAXParser和SAXParserFactory:SAXParserFactory工廠類的newSAXParser()執行個體方法用於建立SAXParser。

  以上兩組API中的XMLReader和SAXParser都是SAX解析器,它們都定義了多個parser()方法,用於以SAX方式解析XML文檔。

  其中,XMLReader提供了如下2個用於解析XML文檔的parser()方法。

  (1)void parse(InputSource input);   //解析InputSource輸入源中的XML文檔

  (2)void parse(String systemId);    //解析系統URI指定的XML文檔

  SAXParser則提供了如下4個用於解析XML文檔的parser()方法。

  (1)void parse(File f, DefaultHandler dh);         //解析f檔案所代表的XML文檔

  (2)void parse(InputSource is, DefaultHandler dh);    //解析InputSource輸入源中的XML文檔

  (3)void parse(InputStream is, DefaultHandler dh);   //解析InputStream輸入源中的XML文檔

  (4)void parse(String uri, DefaultHandler dh);       //解析系統URI指定的XML文檔

  可以看出,在SAXParser的parser()方法中,第二個參數是一個DefaultHandler對象,該對象就是用於監聽SAX解析事件的監聽器。

SAX的監聽器:
(1)ContentHandler:堅挺xml文檔內容處理事件
(2)DTDHandler:監聽DTD事件的監聽器
(3)EntityResolver 監聽實體處理事件
(4)ErrorHandler 監聽錯誤
JAXP提供了DefaultHandler類來實現監聽。DefaultHandler類實現了ContentHandler、DTDHandler、EntityResolver和ErrorHandler介面,並為這些介面中所包含的方法提供了空實現。因此,開發人員只需要編寫一個繼承自DefaultHandler的類,並重寫自己所關心的監聽方法,而無須為每個方法都提供實現。

SAX解析xml文檔的一般步驟:

(1)通過SAXParserFactory的newInstance()方法建立SAXParserFactory對象(SAX解析器工廠)
(2)通過SAXParserFactory對象的newSAXParser()建立SAXParser對象(SAX解析器)
(3) 通過SAXParser對象的parser()方法解析xml文檔,該方法的第二個參數要傳入一個DefaultHandler對象

綜上,附上代碼供大家參考:

 

 

1.DOM樹中的物件類型

  使用DOM解析XML文檔時,整個XML文檔會被轉換成一顆DOM樹,DOM解析器會將XML文檔的節點對應轉化成DOM樹的每個節點。

  DOM樹不僅可以描述XML文檔的結構化特徵,而且具有物件模型的特徵,將XML文檔轉換成DOM樹的過程,就是將文檔模型對象化的過程。

2.DOM解析器(與SAX解析器類似)

  通過以下三個步驟可以實現DOM解析器的建立,並完成XML文檔模型對象化的過程。

  (1)通過調用DocumentBuilderFactory類的newInstance()方法,建立一個DOM解析器工廠對象。

  (2)通過調用DOM解析器工廠對象的newDocumentBuilder()方法,建立一個DOM解析器對象。

  (3)通過調用DOM解析器對象的parse()方法,完成文檔模型對象化的過程,將XML文檔解析成Document文檔對象。

附上代碼:

綜上所訴,大家對xml的解析肯定有了一定的瞭解,但想真正學會如何使用xml還要用心繼續學習。加油。(本文參考了“依舊淡然”的相關片段,並在此基礎上整理加上個人的理解,希望對大家有用)

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.