2018-04-28—XML解析(SAX解析)

大家還記得我們之前講的Json串嗎薪韩,那個(gè)東西解析起來(lái) 是不是挺麻煩的确沸,等看完今天這篇文章,你就會(huì)覺(jué)得json解析好簡(jiǎn)單俘陷。沒(méi)錯(cuò)罗捎,我們今天就要講一下xml解析。



一拉盾、XML格式

首先大家對(duì)于xml應(yīng)該都不會(huì)陌生桨菜,最常見(jiàn)的就是我們使用的layout.xml,他就是一個(gè)xml文件捉偏,而他的格式如下:

這是一個(gè)最基本的xml倒得,每一個(gè)<student></student>為一組標(biāo)簽,標(biāo)簽名為student夭禽,在<student???? >中的name霞掺,id,sex驻粟,都是student的屬性根悼。而中間的<phone></phone>為他的內(nèi)容凶异,也是一組標(biāo)簽,標(biāo)簽名為phone挤巡。watch同上剩彬。

所以現(xiàn)在我們很明顯看出來(lái)了,這是一個(gè)簡(jiǎn)單的兩重嵌套xml矿卑。最外成的是標(biāo)簽名為student的外標(biāo)簽喉恋,它里面有三個(gè)屬性分別是name,id母廷,sex轻黑。他的內(nèi)容有兩個(gè)子標(biāo)簽,標(biāo)簽名分別為phone和watch琴昆。

注意:一定要很熟悉xml的嵌套結(jié)構(gòu)氓鄙,這樣在編寫(xiě)解析代碼時(shí)很有用。

然后我們一起來(lái)解析一下這個(gè)很簡(jiǎn)單的xml吧业舍。

首先我們要知道Android中抖拦,解析xml有三種方式:SAX,Pull舷暮,和Dom态罪。今天我們只看一下SAX的解析方式:



二、SAX方式解析XML

在解析之前呢下面,我們首先要有一個(gè)xml數(shù)據(jù)复颈,大家還記得我們把本地的json串放在哪里了嗎?沒(méi)錯(cuò)在assets目錄下沥割。


為了方便耗啦,我們創(chuàng)建一個(gè)類,專門用于解析xml驯遇。

然后就開(kāi)始正式解析過(guò)程了:

1.首先創(chuàng)建解析器工廠

2.創(chuàng)建解析器:

3.我們需要?jiǎng)?chuàng)建一個(gè)類去繼承DefaultHandler類芹彬,來(lái)進(jìn)行數(shù)據(jù)處理

1)我們需要重寫(xiě)如下的5個(gè)方法

這五個(gè)方法分別是開(kāi)始文檔叉庐、開(kāi)始標(biāo)簽、文本數(shù)據(jù)處理陡叠、結(jié)束標(biāo)簽玩郊、結(jié)束文檔

開(kāi)始文檔和結(jié)束文檔這兩個(gè)方法可以理解為是在我們最開(kāi)始和結(jié)束時(shí)候調(diào)用的方法译红。當(dāng)我們收到了文件開(kāi)頭,就會(huì)進(jìn)入開(kāi)始文檔方法侦厚,而末尾相反耻陕。

開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽這兩個(gè)方法是在我們收到手標(biāo)簽和尾標(biāo)簽進(jìn)入的方法刨沦。他們兩個(gè)的參數(shù)都一樣,分別是命名空間(現(xiàn)在不用管他)想诅、標(biāo)簽名字、帶命名空間的標(biāo)簽的名字来破、標(biāo)簽中的屬性集。

我們只需要注意localName和attributes這兩個(gè)參數(shù)就好徘禁。

2)startDocument重寫(xiě)

這個(gè)方法重寫(xiě)非常簡(jiǎn)單,我們只需要在里面創(chuàng)建一個(gè)list對(duì)象就好晌坤。

對(duì)了我們還需要一個(gè)Bean類逢艘,來(lái)對(duì)應(yīng)我們xml中的數(shù)據(jù),Beans類如上所示骤菠。

2)startElements方法重寫(xiě)

我們通過(guò)一個(gè)全局的String對(duì)象tag來(lái)接收我們的標(biāo)簽名字,如果標(biāo)簽名字為student疤孕,那么我們通過(guò)attributes屬性分別獲取他的對(duì)應(yīng)屬性并且賦值商乎。

有人可能會(huì)說(shuō)還有兩個(gè)標(biāo)簽watch和phone呢,這兩個(gè)我們后面再說(shuō)祭阀。

3)character方法重寫(xiě)

我們上面說(shuō)到的那兩個(gè)標(biāo)簽在這里用到了鹉戚,characters對(duì)應(yīng)的三個(gè)屬性分別是獲取到的內(nèi)容值,內(nèi)容的起始位置专控,內(nèi)容的長(zhǎng)度抹凳。

我們先用一個(gè)string類接收內(nèi)容值,然后一個(gè)空判斷伦腐,接著給對(duì)應(yīng)的標(biāo)簽加入內(nèi)容值赢底。

4)endElements

這個(gè)方法重寫(xiě)很簡(jiǎn)單,我們判斷標(biāo)簽如果是student柏蘑,就把剛才賦值了的student對(duì)象傳入list中幸冻,然后一定要把stduent和tag置空,為了下一次的操作咳焚。

endDocuments方法不用重寫(xiě)了洽损。

5)別忘了返回我們得到的數(shù)據(jù)

4.開(kāi)始解析

現(xiàn)在我們可以看一下日志:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市革半,隨后出現(xiàn)的幾起案子碑定,更是在濱河造成了極大的恐慌流码,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件延刘,死亡現(xiàn)場(chǎng)離奇詭異漫试,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)访娶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門商虐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人崖疤,你說(shuō)我怎么就攤上這事秘车。” “怎么了劫哼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵叮趴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我眯亦,道長(zhǎng)般码,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任宫静,我火速辦了婚禮孤里,結(jié)果婚禮上捌袜,老公的妹妹穿的比我還像新娘炸枣。我一直安慰自己,他們只是感情好博其,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布慕淡。 她就那樣靜靜地躺著沸毁,像睡著了一般傻寂。 火紅的嫁衣襯著肌膚如雪疾掰。 梳的紋絲不亂的頭發(fā)上徐紧,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天并级,我揣著相機(jī)與錄音,去河邊找鬼稻励。 笑死愈涩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的煤篙。 我是一名探鬼主播毁腿,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了味悄?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤唐片,失蹤者是張志新(化名)和其女友劉穎费韭,沒(méi)想到半個(gè)月后庭瑰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡督暂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年逻翁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酷愧。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡溶浴,死狀恐怖滴铅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拱烁,我是刑警寧澤噩翠,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布伤锚,位于F島的核電站,受9級(jí)特大地震影響猛们,放射性物質(zhì)發(fā)生泄漏狞洋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一庐橙、第九天 我趴在偏房一處隱蔽的房頂上張望态鳖。 院中可真熱鬧,春花似錦浆竭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)包蓝。三九已至,卻和暖如春亡电,著一層夾襖步出監(jiān)牢的瞬間硅瞧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工或辖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颂暇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓耳鸯,卻偏偏與公主長(zhǎng)得像县爬,于是被迫代替她去往敵國(guó)和親添谊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容