![【移動應(yīng)用開發(fā)技術(shù)】Android SAX解析器怎么實(shí)現(xiàn)_第1頁](http://file4.renrendoc.com/view/dc8b50ba0aa5a28acd7e5e4def909ec0/dc8b50ba0aa5a28acd7e5e4def909ec01.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Android SAX解析器怎么實(shí)現(xiàn)_第2頁](http://file4.renrendoc.com/view/dc8b50ba0aa5a28acd7e5e4def909ec0/dc8b50ba0aa5a28acd7e5e4def909ec02.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Android SAX解析器怎么實(shí)現(xiàn)_第3頁](http://file4.renrendoc.com/view/dc8b50ba0aa5a28acd7e5e4def909ec0/dc8b50ba0aa5a28acd7e5e4def909ec03.gif)
下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年建筑項(xiàng)目屋面防水合同模板
- 2025年合同擔(dān)保法律適用實(shí)務(wù)分析
- 2025年合伙企業(yè)經(jīng)營合同
- 2025年優(yōu)良外墻涂裝工程合同樣本
- 2025年合伙人之間的投資合同范例
- 2025年焦作a2駕駛證貨運(yùn)從業(yè)資格證模擬考試
- 2025年和田貨運(yùn)資格證模擬考試卷
- 2025年醫(yī)療產(chǎn)品出口代理年協(xié)議
- 2025年寶雞駕??荚嚳拓涍\(yùn)從業(yè)資格證考試題庫
- 2025年傳統(tǒng)茶具訂購合同
- 內(nèi)業(yè)資料承包合同個(gè)人與公司的承包合同
- 2024年計(jì)算機(jī)二級WPS考試題庫(共380題含答案)
- 【履職清單】2024版安全生產(chǎn)責(zé)任體系重點(diǎn)崗位履職清單
- 跨學(xué)科實(shí)踐活動10調(diào)查我國航天科技領(lǐng)域中新型材料新型能源的應(yīng)用課件九年級化學(xué)人教版(2024)下冊
- 2022年全國醫(yī)學(xué)博士英語統(tǒng)一考試試題
- 學(xué)校工作總結(jié)和存在的不足及整改措施
- Petrel中文操作手冊(1-3)
- 《工業(yè)自動化技術(shù)》課件
- 代理分銷銷售協(xié)議書
- (績效考核)鉗工技能鑒定考核試題庫
- 215kWh工商業(yè)液冷儲能電池一體柜用戶手冊
評論
0/150
提交評論