有以下兩種方法:
1、SAX解析
SAX:Simple API for XML .基于事件驅(qū)動的解析方式,逐行解析數(shù)據(jù)。(采用協(xié)議回調(diào)機制)
SAX解析XML,是基于事件通知的模式,一邊讀取XML文檔一邊處理,不必等整個文檔加載完之后才采取操作,SAX解析器會檢測整個XML樹形結(jié)構(gòu),你的代碼會控制它在哪里停止,使用哪些數(shù)據(jù)之類的事情。就是說,SAX可控制性強,占用內(nèi)存小,適用于提取部分數(shù)據(jù)。當(dāng)在讀取解析過程中遇到需要處理的對象,會發(fā)出通知對其進行處理,如果XML格式在某一處出現(xiàn)錯誤,前面的數(shù)據(jù)會被提取出來,錯誤后面數(shù)據(jù)的就顯示不出來。
NSXMLParse類是iOS自帶的XML解析類。采用SAX方式解析數(shù)據(jù)
解析過程由NSXMLParserDelegate協(xié)議方法回調(diào)
解析過程:開始標(biāo)簽->取值->結(jié)束標(biāo)簽->取值
代碼的實現(xiàn)過程是,首先我們建立一個XML文檔,并引入文件,如下:

其次我們建立一個表格試圖控制器(TableViewController)
定義一個私有屬性數(shù)組datasource用來存儲模型數(shù)據(jù)和startTag屬性用來暫存起始標(biāo)簽

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

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

當(dāng)XML在逐個解析文件數(shù)據(jù)時,由于起始標(biāo)簽和結(jié)束標(biāo)簽名字一樣,當(dāng)解析到結(jié)束標(biāo)簽時,為了避免解析到的結(jié)束標(biāo)簽后面的內(nèi)容將模型對象中的相應(yīng)的屬性覆蓋,在解析結(jié)束標(biāo)簽的方法內(nèi)部將起始標(biāo)簽置為nil
在每個方法內(nèi)部我們同時打印了一下方法名,這樣我們就可以在輸出端清晰的看到方法的執(zhí)行順序,
同時在表格的設(shè)置方法內(nèi)部建立重建機制

2、DOM工具解析
DOM:Document Object Model(文檔對象模型)。解析時需要將XML文件整體讀入,并且將XML結(jié)構(gòu)化成樹狀,使用時再通過樹狀結(jié)構(gòu)讀取相關(guān)數(shù)據(jù),查找特定節(jié)點,然后對節(jié)點進行讀或?qū)?。他的主要?yōu)勢是實現(xiàn)簡單,讀寫平衡;缺點是比較占內(nèi)存,因為他要把整個xml文檔都讀入內(nèi)存,文件越大,這種缺點就越明顯。當(dāng)文件內(nèi)容出現(xiàn)錯誤時,在輸入框內(nèi)會標(biāo)記出錯誤的位置
GDataXMLNode是Google提供的開元XML解析類,對libxml2.dylib進行了Objective-C的封裝,因此在使用GDataXML之前,你需要先導(dǎo)入libxml2。
iOS中包含一個C語言的動態(tài)鏈接庫libxml2.dylib,解析速度比NSXMLParser快
