【移動應(yīng)用開發(fā)技術(shù)】Android SAX解析器怎么實(shí)現(xiàn)_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android SAX解析器怎么實(shí)現(xiàn)_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android SAX解析器怎么實(shí)現(xiàn)_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】AndroidSAX解析器怎么實(shí)現(xiàn)

本篇內(nèi)容介紹了“AndroidSAX解析器怎么實(shí)現(xiàn)”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓在下帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!de>RssHandlerde>類擴(kuò)展了de

>org.xml.sax.helpers.DefaultHandlerde>類。該類為SAX

解析器生成的事件所對應(yīng)的所有方法都提供了一個(gè)默認(rèn)的非操作實(shí)現(xiàn)。這允許子類根據(jù)需要僅覆蓋一些方法。de>RssHandlerde>

提供了一個(gè)額外的API,即de>getMessagesde>。它返回處理程序在從SAX解析器接收事件時(shí)所收集的de

>Messagede>對象列表。它有另外兩個(gè)內(nèi)部變量,de>currentMessagede>針對被解析的

de>Messagede>實(shí)例,以及名稱為de>builderde>的de

>StringBuilderde>變量,用于存儲文本節(jié)點(diǎn)中的字符數(shù)據(jù)。解析器將相應(yīng)事件發(fā)送給處理程序時(shí)會調(diào)用de

>startDocumentde>方法,這兩個(gè)變量的初始化操作就是在此時(shí)完成。查看de>startElementde>方法。在XML文檔中每次遇到開始標(biāo)記時(shí)都會調(diào)用它。您只關(guān)心該標(biāo)記何時(shí)為de

>ITEMde>標(biāo)記。對于這種情況,您將創(chuàng)建一個(gè)新的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)記是一個(gè)de>ITEMde>,則de>currentMessagede>

將被添加到Messages列表中。所有這些都是非常典型的SAX解析;此處的一切都不是Android所特有的。因此,如果您知道如何編寫

JavaSAX解析器,則應(yīng)該知道如何編寫AndroidSAX解析器。但是,androidsdk確實(shí)在SAX上添加了一些便捷的特性。AndroidSAX解析器java代碼:public

class

AndroidSaxFeedParser

extends

BaseFeedParser

{

public

AndroidSaxFeedParser(String

feedUrl)

{

super(feedUrl);

}

public

List<

Message

>

parse()

{

RssHandler

handler

=

new

RssHandler();

try

{

Xml.parse(this.getInputStream(),

Xml.Encoding.UTF_8,

handler);

}

catch

(Exception

e)

{

throw

new

RuntimeException(e);

}

return

handler.getMessages();

}

}注意,這個(gè)類仍然使用了一個(gè)標(biāo)準(zhǔn)的SAX處理程序,因此您僅僅重用了所示的de>RssHandlerde>。能夠重用SAX

處理程序是非常不錯(cuò)的,但其代碼稍微有些復(fù)雜。您可以想像,如果需要解析一個(gè)更加復(fù)雜的XML文檔,則處理程序可能會帶來各種各樣的

bug。舉例來說,回頭看看de>endElementde>方法。注意,在嘗試設(shè)置屬性之前,它檢查了de

>currentMessagede>是否為null。現(xiàn)在,再回頭看看示例XML。注意,de>ITEMde>

標(biāo)記外部有一些de>TITLEde>和de>LINKde>標(biāo)記。這就是使用null

檢查的原因。否則,每一個(gè)de>TITLEde>標(biāo)記會導(dǎo)致一個(gè)de>NullPointerExceptionde

>。Android提供了自己獨(dú)有的SAXAPI,它排除了您編寫自己的SAX處理程序的需要。經(jīng)過簡化的AndroidSAX解析器java代碼:public

class

AndroidSaxFeedParser

extends

BaseFeedParser

{

public

AndroidSaxFeedParser(String

feedUrl)

{

super(feedUrl);

}

public

List<

Message

>

parse()

{

final

Message

currentMessage

=

new

Message();

RootElement

root

=

new

RootElement("rss");

final

List<

Message

>

messages

=

new

ArrayList<

Message

>();

Element

channel

=

root.getChild("channel");

Element

item

=

channel.getChild(ITEM);

item.setEndElementListener(new

EndElementListener(){

public

void

end()

{

messages.add(currentMessage.copy());

}

});

item.getChild(TITLE).setEndTextElementListener(new

EndTextElementListener(){

public

void

end(String

body)

{

currentMessage.setTitle(body);

}

});

item.getChild(LINK).setEndTextElementListener(new

EndTextElementListener(){

public

void

end(String

body)

{

currentMessage.setLink(body);

}

});

item.getChild(DESCRIPTION).setEndTextElementListener(new

EndTextElementListener(){

public

void

end(String

body)

{

currentMessage.setDescription(body);

}

});

item.getChild(PUB_DATE).setEndTextElementListener(new

EndTextElementListener(){

public

void

end(String

body)

{

currentMessage.setDate(body);

}

});

try

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論