一、XML
什么是XML
全稱是Extensible Markup Language,譯作“可擴(kuò)展標(biāo)記語言”
跟JSON一樣,也是常用的一種用于交互的數(shù)據(jù)格式
一般也叫XML文檔(XML Document)-
一個常見的XML文檔一般由以下部分組成
- 文檔聲明
- 元素(Element)
- 屬性(Attribute)
二、XML 解析
-
XML的解析方式有2種
- DOM:一次性將整個XML文檔加載進(jìn)內(nèi)存,比較適合解析小文件(apple 不推薦)
- SAX:從根元素開始,按順序一個元素一個元素往下解析,比較適合解析大文件
-
在iOS中,解析XML的手段有很多
蘋果原生
NSXMLParser:SAX方式解析,使用簡單第三方框架
libxml2:純C語言,默認(rèn)包含在iOS SDK中,同時支持DOM和SAX方式解析
GDataXML:DOM方式解析,由Google開發(fā),基于libxml2
-
XML解析方式的選擇建議
- 大文件:NSXMLParser
- 小文件:GDataXML、NSXMLParser
三、兩種解析方案
-
NSXMLParser的用法
- 創(chuàng)建解析器來解析
// 創(chuàng)建XML解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 設(shè)置代理
parser.delegate = self;
// 開始解析XML(parse方法是阻塞式的)
[parser parse];
- 2 . 代理對象要遵守NSXMLParserDelegate協(xié)議,實(shí)現(xiàn)代理方法
/**
* 解析到某個元素的結(jié)尾(比如解析</videos>)
*/
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
}
/**
* 解析到某個元素的開頭(比如解析<videos>)
*/
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
}
/**
* 開始解析XML文檔
*/
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
}
/**
* 解析完畢
*/
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
}
-
GDataXML 用法
- 手動導(dǎo)入框架,添加依賴庫

Snip20150811_1.png
-
配置
Snip20150811_2.png

Snip20150811_3.png
-
設(shè)置非ARC標(biāo)記
Snip20150811_4.png 具體用法
// 加載整個文檔
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
// 獲得根節(jié)點(diǎn)
doc.rootElement;
// 獲得其他節(jié)點(diǎn)
[element elementsForName:@"video"];
// 獲得節(jié)點(diǎn)的屬性
[element attributeForName:@"name"].stringValue;