亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android讀寫XML(中)

系統 2142 0

注明:本文轉自 http://www.moandroid.com.

前面在 Android讀寫XML(上)——package說明 中,詳細介紹了使用 DOM方法讀取XML文檔,由于使用DOM方法需要將整個XML文檔加載內存中,對系統資源占用比較多,這對內存比較緊張的Android系統來說,使用DOM方法讀取XML文檔會有很大的限制。 使用SAX方法讀取XML,對內存資源的占用的比較少,因此在嵌入式設備中極力推薦使用,Android也不例外,本篇幅詳細說明Android中如何使用SAX讀取XML文檔。

SAX采用基于事件驅動的處理方式,它將XML文檔轉換成一系列的事件,由單獨的事件處理器來決定如何處理。為了了解如何使用SAX API處理XML文檔,這里介紹一下SAX所使用的基于事件驅動的處理模式。

基于事件驅動的處理模式

基于事件的處理模式主要圍繞著 事件源 以及 事件處理器 來工作的。一個可以產生事件的對象被稱為 事件源 ,而可以對事件產生響應的對象就被叫做 事件處理器 。事件源與事件處理對象是通過在事件源中的事件注冊方法連接的。當事件源產生時間后,調用事件處理器相應的方法,一個事件獲得處理。當在事件源調用事件處理器中特定方法的時候,會傳遞個事件標志以及其響應事件的狀態信息,這樣事件處理器才能夠根據事件信息來決定自己的行為。

在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通過parser()方法來開始解析XML文檔,并根據文檔的內容產生事件。而事件處理器則是org.xml.sax包中的ContentHander、DTDHander、ErrorHandler,以及EntityResolver這4個接口,它們分別處理事件源在解析XML文檔過程中產生的不同種類的事件。而事件源XMLReader與這4個事件處理器的連接是通過在XMLReader中的相應事件處理器注冊方法setXXXX()來完成的,詳細介紹請見下表:

以上的4個事件源處理器接口,在開發中沒有必要直接從這4個接口直接繼承,因為org.xml.sax.helper包為我們提供了類DefaultHandler,其繼承了這4個個接口,在實際開發中直接從DefaultHandler繼承并實現相關函數就可以了。在這4個接口中,最重要的是ContentHanlder接口,下面就其中的方法加以說明,如下:

以上就是解析一個XML文檔,事件處理的過程。這里我們對org.xml.sax.XMLReader中的方法做下補充說明:除了前面介紹的一系列事件處理器注冊方法set/getXXXX()外,還有個重要的函數:parse(InputSource input)–Parse an XML document,開始解析一個XML文檔。

按照應用程序開發的流程,簡要介紹下SAX的使用方法

  1. 首先,編寫了解XML文檔的結構,按照XML文檔的結構,編寫具體的數據結構,類似于:XXXXList,XXXXItem,最好與XML的文檔保持一致。
  2. 其次,開始實現事件處理對象,Android SDK為我們提供了DefaultHandler,其繼承了ContentHandler 、DTDHandler、 EntityResolver、 ErrorHandler的所有接口。我們在DefaultHandler的基礎上,按照需求實現ContentHanlder的所有接口,這里需要注意2個方面的問題:
    1. 事件處理的順序,處理時間的位置:一般在startDocument()初始化工作,在endDocument()中收尾的處理工作;startElement()—characters()—endDocument()是一個XML節點讀取的過程,startElement()用來初始判斷,characters()獲取節點的字符數據,endDocument()將數據寫入數據結構。
    2. 異常SAXException的處理;
  3. 然后,XML實體解析,過程如下:
    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser parser = factory.newSAXParser();
    XMLReader xmlreader = parser.getXMLReader();
    URL rrl = new URL(urlstring);
    InputSource is = new InputSource(url.openStream());
    Xmlreader.setContentHanlder(XXXX);
    Xmlreader.parse(is);
  4. 最后,在Activity中顯示數據,一般先將XML中讀取的數據,選擇合適的Adaper對數據進行封裝,然后使用ListView控件來顯示數據。

以上就是SAX讀取XML的過程,并顯示出最終的數據。以上需要注意的是SAXParserFactory ,SAXParser類來自 javax.xml.parsers包中。

總結說明

SAX讀取XML文檔的方法,占用內存比較少,但是開發流程相比DOM就復雜多了,具體采用哪種方法比較合適,大家可以在開發的過程中來深刻體會之間的差別。

Android讀寫XML(中)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 高清欧美色欧美综合网站 | 精品久久久久久久高清 | 国产成人香蕉在线视频fuz | 日韩在线视精品在亚洲 | 亚洲一区中文字幕 | 国产剧情一区二区三区 | 成人午夜视频在线播放 | 亚洲国产精品一区二区久久 | 天天天天操 | 亚洲视频在线精品 | 毛片在线高清免费观看 | 巨乳一级片 | 欧美午夜寂寞影院安卓列表 | 色婷婷综合久久久中文字幕 | 老司机亚洲精品影院在线 | 真人午夜a一级毛片 | 精品九九视频 | 免费 高清 日本1在线观看 | 久久福利青草免费精品 | 99精品大学生啪啪自拍 | 91麻精品国产91久久久久 | 国产日韩精品一区在线观看播放 | 久久久青青久久国产精品 | 九九亚洲综合精品自拍 | 91视频一区二区 | 国产激情视频一区二区三区 | 黄色免费看网站 | 成人a毛片高清视频 | 精品国产成人 | 日本特黄a级高清免费大片18 | 黄色短视频在线播放 | 欧美xxxxx性另类 | 亚洲国产精品自产拍在线播放 | 亚洲视频在线一区 | 梦想成为魔法少女在线观看 | 亚洲欧美在线综合一区二区三区 | 中文字幕一区精品 | 国产成人a毛片在线 | 亚洲 日本 欧美 中文幕 | 韩国三日本三级中文字幕 | 久久免费资源福利资源站 |