標籤: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還要用心繼續學習。加油。(本文參考了“依舊淡然”的相關片段,並在此基礎上整理加上個人的理解,希望對大家有用)