日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android XML讀寫(五)

de >RssHandlerde > 類擴(kuò)展了 de >org.xml.sax.helpers.DefaultHandlerde > 類。該類為 SAX 解析器生成的事件所對應(yīng)的所有方法都提供了一個默認(rèn)的非操作實(shí)現(xiàn)。這允許子類根據(jù)需要僅覆蓋一些方法。de >RssHandlerde > 提供了一個額外的 API,即 de >getMessagesde >。它返回處理程序在從 SAX 解析器接收事件時(shí)所收集的 de >Messagede > 對象列表。它有另外兩個內(nèi)部變量,de >currentMessagede > 針對被解析的 de >Messagede > 實(shí)例,以及名稱為 de >builderde > 的 de >StringBuilderde > 變量,用于存儲文本節(jié)點(diǎn)中的字符數(shù)據(jù)。解析器將相應(yīng)事件發(fā)送給處理程序時(shí)會調(diào)用 de >startDocumentde > 方法,這兩個變量的初始化操作就是在此時(shí)完成。

為松江等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及松江網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、成都做網(wǎng)站、松江網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

查看de >startElementde > 方法。在XML文檔中每次遇到開始標(biāo)記時(shí)都會調(diào)用它。您只關(guān)心該標(biāo)記何時(shí)為 de >ITEMde > 標(biāo)記。對于這種情況,您將創(chuàng)建一個新的 de >Messagede >?,F(xiàn)在來看 de >charactersde > 方法。遇到文本節(jié)點(diǎn)中的字符數(shù)據(jù)時(shí)便會調(diào)用此方法。數(shù)據(jù)只是被添加到 de >builderde > 變量中。***,我們來看 de >endElementde > 方法。遇到結(jié)束標(biāo)記時(shí)會調(diào)用此方法。對于與某 de >Messagede > 屬性相對應(yīng)的標(biāo)記,如 de >TITLEde > 和 de >LINKde >,則使用 de >builderde > 變量中的數(shù)據(jù)在 de >currentMessagede > 上設(shè)置適當(dāng)?shù)膶傩浴H绻Y(jié)束標(biāo)記是一個 de >ITEMde >,則 de >currentMessagede > 將被添加到 Messages 列表中。所有這些都是非常典型的 SAX 解析;此處的一切都不是 Android 所特有的。因此,如果您知道如何編寫 Java SAX 解析器,則應(yīng)該知道如何編寫 Android SAX 解析器。但是,android sdk 確實(shí)在 SAX 上添加了一些便捷的特性。

Android SAX 解析器

java代碼:

 
 
  1. public class AndroidSaxFeedParser extends BaseFeedParser { 
  2. public AndroidSaxFeedParser(String feedUrl) { 
  3. super(feedUrl); 
  4. public List< Message > parse() { 
  5. RssHandler handler = new RssHandler(); 
  6. try { 
  7. Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, handler); 
  8. } catch (Exception e) { 
  9. throw new RuntimeException(e); 
  10. return handler.getMessages(); 

注意,這個類仍然使用了一個標(biāo)準(zhǔn)的 SAX 處理程序,因此您僅僅重用了所示的 de >RssHandlerde >。能夠重用 SAX 處理程序是非常不錯的,但其代碼稍微有些復(fù)雜。您可以想像,如果需要解析一個更加復(fù)雜的 XML 文檔,則處理程序可能會帶來各種各樣的 bug。舉例來說,回頭看看 de >endElementde > 方法。注意,在嘗試設(shè)置屬性之前,它檢查了 de >currentMessagede > 是否為 null。現(xiàn)在,再回頭看看示例 XML。 注意,de >ITEMde > 標(biāo)記外部有一些 de >TITLEde > 和 de >LINKde > 標(biāo)記。這就是使用 null 檢查的原因。否則,每一個 de >TITLEde > 標(biāo)記 會導(dǎo)致一個 de >NullPointerExceptionde >。Android 提供了自己獨(dú)有的 SAX API,它排除了您編寫自己的 SAX 處理程序的需要。

經(jīng)過簡化的 Android SAX 解析器

java代碼:

 
 
  1. public class AndroidSaxFeedParser extends BaseFeedParser { 
  2. public AndroidSaxFeedParser(String feedUrl) { 
  3. super(feedUrl); 
  4. public List< Message > parse() { 
  5. final Message currentMessage = new Message(); 
  6. RootElement root = new RootElement("rss"); 
  7. final List< Message > messages = new ArrayList< Message >(); 
  8. Element channel = root.getChild("channel"); 
  9. Element item = channel.getChild(ITEM); 
  10. item.setEndElementListener(new EndElementListener(){ 
  11. public void end() { 
  12. messages.add(currentMessage.copy()); 
  13. }); 
  14. item.getChild(TITLE).setEndTextElementListener(new EndTextElementListener(){ 
  15. public void end(String body) { 
  16. currentMessage.setTitle(body); 
  17. }); 
  18. item.getChild(LINK).setEndTextElementListener(new EndTextElementListener(){ 
  19. public void end(String body) { 
  20. currentMessage.setLink(body); 
  21. }); 
  22. item.getChild(DESCRIPTION).setEndTextElementListener(new 
  23. EndTextElementListener(){ 
  24. public void end(String body) { 
  25. currentMessage.setDescription(body); 
  26. }); 
  27. item.getChild(PUB_DATE).setEndTextElementListener(new EndTextElementListener(){ 
  28. public void end(String body) { 
  29. currentMessage.setDate(body); 
  30. }); 
  31. try { 
  32. Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8,root.getContentHandler()); 
  33. } catch (Exception e) { 
  34. throw new RuntimeException(e); 
  35. return messages; 

網(wǎng)站標(biāo)題:Android XML讀寫(五)
文章地址:http://m.5511xx.com/article/cccodos.html