如何進(jìn)行XML解析

有以下兩種方法:

1、SAX解析

SAX:Simple API for XML .基于事件驅(qū)動(dòng)的解析方式,逐行解析數(shù)據(jù)。(采用協(xié)議回調(diào)機(jī)制)

SAX解析XML,是基于事件通知的模式,一邊讀取XML文檔一邊處理,不必等整個(gè)文檔加載完之后才采取操作,SAX解析器會(huì)檢測(cè)整個(gè)XML樹形結(jié)構(gòu),你的代碼會(huì)控制它在哪里停止,使用哪些數(shù)據(jù)之類的事情。就是說,SAX可控制性強(qiáng),占用內(nèi)存小,適用于提取部分?jǐn)?shù)據(jù)。當(dāng)在讀取解析過程中遇到需要處理的對(duì)象,會(huì)發(fā)出通知對(duì)其進(jìn)行處理,如果XML格式在某一處出現(xiàn)錯(cuò)誤,前面的數(shù)據(jù)會(huì)被提取出來,錯(cuò)誤后面數(shù)據(jù)的就顯示不出來。

NSXMLParse類是iOS自帶的XML解析類。采用SAX方式解析數(shù)據(jù)

解析過程由NSXMLParserDelegate協(xié)議方法回調(diào)

解析過程:開始標(biāo)簽->取值->結(jié)束標(biāo)簽->取值

代碼的實(shí)現(xiàn)過程是,首先我們建立一個(gè)XML文檔,并引入文件,如下:

1.png

其次我們建立一個(gè)表格試圖控制器(TableViewController

定義一個(gè)私有屬性數(shù)組datasource用來存儲(chǔ)模型數(shù)據(jù)和startTag屬性用來暫存起始標(biāo)簽

2.png

同時(shí)在方法ViewDidLoad里面獲取文件數(shù)據(jù)并指定代理<NSXMLParserDelegate>//解析器協(xié)議,同時(shí)為對(duì)應(yīng)的重用標(biāo)識(shí)符注冊(cè)單元格的類型

3.png

NSXMLParserDelegate 解析器協(xié)議里面有如下方法:

4.png

當(dāng)XML在逐個(gè)解析文件數(shù)據(jù)時(shí),由于起始標(biāo)簽和結(jié)束標(biāo)簽名字一樣,當(dāng)解析到結(jié)束標(biāo)簽時(shí),為了避免解析到的結(jié)束標(biāo)簽后面的內(nèi)容將模型對(duì)象中的相應(yīng)的屬性覆蓋,在解析結(jié)束標(biāo)簽的方法內(nèi)部將起始標(biāo)簽置為nil

在每個(gè)方法內(nèi)部我們同時(shí)打印了一下方法名,這樣我們就可以在輸出端清晰的看到方法的執(zhí)行順序,
同時(shí)在表格的設(shè)置方法內(nèi)部建立重建機(jī)制

5.png
2、DOM工具解析

DOM:Document Object Model(文檔對(duì)象模型)。解析時(shí)需要將XML文件整體讀入,并且將XML結(jié)構(gòu)化成樹狀,使用時(shí)再通過樹狀結(jié)構(gòu)讀取相關(guān)數(shù)據(jù),查找特定節(jié)點(diǎn),然后對(duì)節(jié)點(diǎn)進(jìn)行讀或?qū)憽K闹饕獌?yōu)勢(shì)是實(shí)現(xiàn)簡(jiǎn)單,讀寫平衡;缺點(diǎn)是比較占內(nèi)存,因?yàn)樗颜麄€(gè)xml文檔都讀入內(nèi)存,文件越大,這種缺點(diǎn)就越明顯。當(dāng)文件內(nèi)容出現(xiàn)錯(cuò)誤時(shí),在輸入框內(nèi)會(huì)標(biāo)記出錯(cuò)誤的位置

GDataXMLNode是Google提供的開元XML解析類,對(duì)libxml2.dylib進(jìn)行了Objective-C的封裝,因此在使用GDataXML之前,你需要先導(dǎo)入libxml2。

iOS中包含一個(gè)C語言的動(dòng)態(tài)鏈接庫libxml2.dylib,解析速度比NSXMLParser

6.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JSON JSON和XML都是需要解析的 JSON是一種輕量級(jí)的數(shù)據(jù)格式,一般用于數(shù)據(jù)交互服務(wù)器返回給客戶端的數(shù)據(jù)...
    JonesCxy閱讀 2,005評(píng)論 2 10
  • 解析的基本概念 解析: 從事先規(guī)定好的格式中提取數(shù)據(jù) 解析的前提: 提前約定好格式,數(shù)據(jù)提供方按照格式提供數(shù)據(jù),數(shù)...
    云之君兮鵬閱讀 1,929評(píng)論 4 28
  • 解析的概念 解析:從事先規(guī)定好的格式中提取數(shù)據(jù)。 解析的前提:提前約定好格式,數(shù)據(jù)提供方按照格式提供數(shù)據(jù),數(shù)據(jù)獲取...
    逗逗豆豆笑閱讀 1,208評(píng)論 2 14
  • 1. XML總結(jié) 1.1. XML簡(jiǎn)介 XML : 可擴(kuò)展的標(biāo)記語言。(和HTML非常類似的) 可擴(kuò)展的。 自定義...
    Ethan_Walker閱讀 3,369評(píng)論 0 12
  • 踢一場(chǎng)足球賽需要花九十分鐘。而踢一場(chǎng)中國(guó)足球,則需要主持人先吹八十分鐘中國(guó)隊(duì)的戰(zhàn)術(shù)如何如何牛逼,然后看看計(jì)時(shí)器,得...
    我并非你期待閱讀 379評(píng)論 0 0

友情鏈接更多精彩內(nèi)容