大家還記得我們之前講的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)在我們可以看一下日志: