日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Android中XML解析模塊的使用方法

系統(tǒng) 2650 0

在音樂(lè)跟電視的項(xiàng)目中,很多都是使用了典型的按照接口規(guī)范的流程處理方式。

Android中XML解析模塊的使用方法

例如上圖,客戶端發(fā)送一個(gè)request請(qǐng)求,服務(wù)端就會(huì)以xml的數(shù)據(jù)格式返回一個(gè)response響應(yīng)。但是在客戶端界面展示xml數(shù)據(jù)并不是那么人性化與現(xiàn)實(shí),所以在此之前,會(huì)對(duì)xml進(jìn)行數(shù)據(jù)解析。縱觀軟終端的大部分項(xiàng)目中,在客戶端進(jìn)行數(shù)據(jù)解析采用的是SAX(Simple API for XML),這是有道理的。

SAX的工作原理簡(jiǎn)單地說(shuō)就是對(duì)文檔進(jìn)行順序掃描,當(dāng)掃描到文檔(document)開(kāi)始與結(jié)束、元素(element)開(kāi)始與結(jié)束、文檔(document)結(jié)束等地方時(shí)通知事件處理函數(shù),由事件處理函數(shù)做相應(yīng)動(dòng)作,然后繼續(xù)同樣的掃描,直至文檔結(jié)束。

大多數(shù)SAX實(shí)現(xiàn)都會(huì)產(chǎn)生以下類(lèi)型的事件
  在文檔內(nèi)每一XML元素接受解析的前后觸發(fā)元素事件。
  在文檔的開(kāi)始和結(jié)束時(shí)觸發(fā)文檔處理事件。
  在處理文檔的DTD或Schema時(shí)產(chǎn)生DTD或Schema事件。
  任何元數(shù)據(jù)通常都由單獨(dú)的事件交付。
  產(chǎn)生錯(cuò)誤事件用來(lái)通知主機(jī)應(yīng)用程序解析錯(cuò)誤。
對(duì)于如下文檔:

在解析文檔的過(guò)程中會(huì)產(chǎn)生如下一系列事件:
  start document
  start element: doc
  start element: para
  characters: Hello, world!
  end element: para
  stat element:title
  characters:sax parse xml
  end element:title
  end element: doc
  end document

一個(gè)完整的SAX處理過(guò)程涉及如下幾個(gè)步驟:
  (1)創(chuàng)建事件處理程序。
  (2)創(chuàng)建SAX解析器。
  (4)對(duì)文檔進(jìn)行解析,將每個(gè)事件發(fā)送給處理程序。
  (3)將事件處理程序分配給解析器。

SAX的優(yōu)缺點(diǎn)
  SAX的優(yōu)點(diǎn):
  解析速度快
  ContentHandler對(duì)象可以是多個(gè)
  內(nèi)存消耗少
SAX的缺點(diǎn):
  必須實(shí)現(xiàn)事件處理程序
  不能修改文檔
  不能隨機(jī)訪問(wèn)
  SAX解析器對(duì)文檔的解析過(guò)程是一種邊解析邊執(zhí)行的過(guò)程
  SAX解析器對(duì)文檔的解析過(guò)程中,無(wú)需把整個(gè)文檔都加載到內(nèi)存中
  使用SAX解析器時(shí),可以注冊(cè)多個(gè)ContentHandler對(duì)象,并行接收事件
  SAX解析器對(duì)文檔的解析是順序進(jìn)行的
  使用SAX對(duì)文檔進(jìn)行解析,只能訪問(wèn)文檔內(nèi)容,無(wú)法做到向文檔中添加節(jié)點(diǎn),更不能刪除和修改文檔中的內(nèi)容。

SAX的常用接口介紹
  ContentHandler接口
  ContentHandler是Java類(lèi)包中一個(gè)特殊的SAX接口,位于org.xml.sax包中。該接口封裝了一些對(duì)事件處理的方法,當(dāng)XML解析器開(kāi)始解析XML輸入文檔時(shí),它會(huì)遇到某些特殊的事件,比如文檔的開(kāi)頭和結(jié)束、元素開(kāi)頭和結(jié)束、以及元素中的字符數(shù)據(jù)等事件。當(dāng)遇到這些事件時(shí),XML解析器會(huì)調(diào)用ContentHandler接口中相應(yīng)的方法來(lái)響應(yīng)該事件。
ContentHandler接口的方法有以下幾種:

DTDHandler接口
  DTDHandler用于接收基本的DTD相關(guān)事件的通知。該接口位于org.xml.sax包中。此接口僅包括DTD事件的注釋和未解析的實(shí)體聲明部分。SAX解析器可按任何順序報(bào)告這些事件,而不管聲明注釋和未解析實(shí)體時(shí)所采用的順序;但是,必須在文檔處理程序的startDocument()事件之后,在第一個(gè)startElement()事件之前報(bào)告所有的DTD事件。
DTDHandler接口包括以下兩個(gè)方法:

接收注釋聲明事件的通知
接收未解析的實(shí)體聲明事件的通知
  EntityResolver接口
  EntityResolver接口是用于解析實(shí)體的基本接口,該接口位于org.xml.sax包中。

該接口只有一個(gè)方法,如下:
  public InputSource resolveEntity(String publicId, String systemId)
  允許應(yīng)用程序解析外部實(shí)體。并返回一個(gè)InputSource類(lèi)的對(duì)象或者為null,用于讀取實(shí)體信息
  解析器將在打開(kāi)任何外部實(shí)體前調(diào)用此方法。此類(lèi)實(shí)體包括在DTD內(nèi)引用的外部DTD子集和外部參數(shù)實(shí)體和在文檔元素內(nèi)引用的外部通用實(shí)體等。如果SAX應(yīng)用程序需要實(shí)現(xiàn)自定義處理外部實(shí)體,則必須實(shí)現(xiàn)此接口。

  ErrorHandler接口
  ErrorHandler接口是SAX錯(cuò)誤處理程序的基本接口。如果SAX應(yīng)用程序需要實(shí)現(xiàn)自定義的錯(cuò)誤處理,則它必須實(shí)現(xiàn)此接口,然后解析器將通過(guò)此接口報(bào)告所有的錯(cuò)誤和警告。

該接口的方法如下:
  void error(SAXParseException exception)
  void fatalError(SAXParseException exception)
  接收可恢復(fù)的錯(cuò)誤通知
  接收不可恢復(fù)的錯(cuò)誤通知
  void warning(SAXParseException exception)
  接收警告的通知

Android中XML解析模塊的使用方法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 罗田县| 封丘县| 灵武市| 屏东市| 芜湖县| 尼勒克县| 松原市| 榆社县| 抚州市| 瑞金市| 石河子市| 吴堡县| 蒙城县| 左贡县| 大余县| 凤山市| 枣庄市| 自治县| 鹿邑县| 军事| 项城市| 白朗县| 二连浩特市| 利川市| 灵台县| 怀柔区| 乌拉特中旗| 张掖市| 阿鲁科尔沁旗| 仙居县| 贡觉县| 东台市| 鹤壁市| 双柏县| 江源县| 玉屏| 津市市| 卫辉市| 甘德县| 乐陵市| 太原市|