解析XML的幾種方式:DOM、SAX冬殃、PULL

以下內(nèi)容整理自互聯(lián)網(wǎng)囚痴,僅用于個人學(xué)習(xí)


DOM解析

解析器讀入整個文檔,然后構(gòu)建一個主流內(nèi)存的樹結(jié)構(gòu)审葬,然后代碼就可以使用dom接口來操作這個樹結(jié)構(gòu)深滚。

優(yōu)點:

  • 整個文檔樹在內(nèi)存中,便于操作涣觉;支持刪除痴荐、修改、重新排列等多種功能官册。
  • 通過樹形結(jié)構(gòu)存取xml文檔生兆。
  • 可以隨時訪問到某個節(jié)點的相鄰節(jié)點。

缺點:

  • 將整個文檔調(diào)入內(nèi)存(包括無用的節(jié)點)膝宁,浪費(fèi)時間和空間鸦难。

適用于: 一旦解析了文檔還需多次訪問這些數(shù)據(jù);硬件資源充足(內(nèi)存员淫,cpu)

DOM解析步驟:

  1. 創(chuàng)建解析器工廠
  2. 獲得解析器工廠
  3. 接受一個xml文檔作為輸入?yún)?shù)名合蔽,并得到一個xml的文檔對象(Document)
  4. 操作文檔對象

SAX解析

SAX是一個解析速度快并且占用內(nèi)存少的xml解析器,非常適合用于android等移動設(shè)備满粗。
SAX解析xml是基于事件流的處理方式的。因此每解析到一個標(biāo)簽愚争,它并不會記錄這個標(biāo)簽之前的信息映皆,而我們只會知道當(dāng)前這個標(biāo)簽的名字和它的屬性挤聘,至于標(biāo)簽里面的嵌套,上層標(biāo)簽的名字這些都是無法知道的捅彻。
Sax的工作原理簡單的說组去,就是對文檔進(jìn)行順序掃描,掃描到文檔(document)開始與結(jié)束步淹,掃描到元素(element)開始从隆、結(jié)束等地方時調(diào)用事件處理處理函數(shù)做相應(yīng)動作,然后繼續(xù)掃描缭裆,直到文檔結(jié)束键闺。
SAX解析xml最重要的步驟就是定義一個我們自己的Handler處理類,我們可以讓其繼承 DefaultHandler這個類澈驼,然后在里面重寫5個回調(diào)方法辛燥。

  • startDocument
  • startElement
  • characters
  • endElement
  • endDocument

SAX特點:

  • 解析效率高,占用內(nèi)存少
  • 可以隨時停止解析
  • 不能載入整個文檔到內(nèi)存
  • 不能寫入xml
  • SAX解析xml文件采用的是事件驅(qū)動

SAX解析過程:

  • 繼承DefaultHandler ,并實現(xiàn)方法
  • 創(chuàng)建SAX解析器工廠
  • 獲得解析器
  • 獲得輸入流
  • 使用輸入流缝其,和實現(xiàn)接口作參數(shù)挎塌,調(diào)用解析器的解析方法進(jìn)行解析

PULL解析

pull解析器是android內(nèi)置的解析器,解析原理與sax類似内边。

pull與sax的不同之處:

  • pull讀取xml文件后觸發(fā)相應(yīng)的事件調(diào)用方法返回的是數(shù)字榴都。
  • SAX解析器的工作方式是自動將事件推入注冊的事件處理器進(jìn)行處理,因此你不能控制事件的處理主動結(jié)束漠其;而Pull解析器的工作方式為允許你的應(yīng)用程序代碼主動從解析器中獲取事件嘴高,正因為是主動獲取事件,因此可以在滿足了需要的條件后不再獲取事件辉懒,結(jié)束解析阳惹。

Pull解析步驟:

  1. 創(chuàng)建解析器對象
    XmlPullParser paser = Xml.newPullParser();
  2. 進(jìn)行解析
    paser.setInput(input,"utf-8");
  3. 產(chǎn)生第一個解析事件
    int eventType = paser.getEventType();
  4. 可以使用循環(huán)判斷是否繼續(xù)解析
    while(eventType!=XmlPullParser.END_DOCUMENT){}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市眶俩,隨后出現(xiàn)的幾起案子莹汤,更是在濱河造成了極大的恐慌,老刑警劉巖颠印,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纲岭,死亡現(xiàn)場離奇詭異,居然都是意外死亡线罕,警方通過查閱死者的電腦和手機(jī)止潮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钞楼,“玉大人喇闸,你說我怎么就攤上這事。” “怎么了燃乍?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵唆樊,是天一觀的道長。 經(jīng)常有香客問我刻蟹,道長逗旁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任舆瘪,我火速辦了婚禮片效,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘英古。我一直安慰自己淀衣,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布哺呜。 她就那樣靜靜地躺著舌缤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪某残。 梳的紋絲不亂的頭發(fā)上国撵,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音玻墅,去河邊找鬼介牙。 笑死,一個胖子當(dāng)著我的面吹牛澳厢,可吹牛的內(nèi)容都是我干的环础。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剩拢,長吁一口氣:“原來是場噩夢啊……” “哼线得!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徐伐,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤贯钩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后办素,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體角雷,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年性穿,在試婚紗的時候發(fā)現(xiàn)自己被綠了勺三。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡需曾,死狀恐怖吗坚,靈堂內(nèi)的尸體忽然破棺而出祈远,到底是詐尸還是另有隱情,我是刑警寧澤商源,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布绊含,位于F島的核電站,受9級特大地震影響炊汹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逃顶,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一讨便、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧以政,春花似錦霸褒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抖誉,卻和暖如春殊轴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背袒炉。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工旁理, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人我磁。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓孽文,卻偏偏與公主長得像,于是被迫代替她去往敵國和親夺艰。 傳聞我的和親對象是個殘疾皇子芋哭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

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