1鉴逞、XML的認(rèn)識(shí)
1鹊奖、什么是XML
- 全稱是Extensible Markup Language长窄,譯作“可擴(kuò)展標(biāo)記語言”
- 跟JSON一樣按厘,也是常用的一種用于交互的數(shù)據(jù)格式
- 一般也叫XML文檔(XML Document
2液走、XML語法
- 一個(gè)常見的XML文檔一般由以下部分組成
- 文檔聲明
- 在XML文檔的最前面碳默,必須編寫一個(gè)文檔聲明,用來聲明XML文檔的類型
- 最簡單的聲明 :<?xml version="1.0" ?>
- 用encoding屬性說明文檔的字符編碼:<?xml version="1.0" encoding="UTF-8" ?>
- 元素(Element)
- 屬性(Attribute)
- 一個(gè)元素可以擁有多個(gè)屬性
- 屬性值必須用 雙引號(hào)"" 或者 單引號(hào)'' 括住
- 實(shí)際上育灸,屬性表示的信息也可以用子元素來表示
3腻窒、XML的解析方式
-
SAX
:從根元素開始,按順序一個(gè)元素一個(gè)元素往下解析磅崭,比較適合解析大文件- 大小文件都可以
- NSXMLParser 蘋果原生
-
DOM
:一次性將整個(gè)XML文檔加載進(jìn)內(nèi)存儿子,比較適合解析小文件- 最好是小文件
- GDataXML:DOM方式解析,由Google開發(fā)砸喻,基于libxml2
4柔逼、第三方框架
- libxml2:純C語言,默認(rèn)包含在iOS SDK中割岛,同時(shí)支持DOM和SAX方式解析
- GDataXML:DOM方式解析愉适,由Google開發(fā),基于libxml2
5癣漆、XML解析方式的選擇建議
- 大文件:NSXMLParser维咸、libxml2
- 小文件:GDataXML、NSXMLParser、libxml2
二癌蓖、NSXMLParse
基本用法
- 1.創(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)代理方法
/**
* 解析到某個(gè)元素的結(jié)尾(比如解析</videos>)
*/
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
}
/**
* 解析到某個(gè)元素的開頭(比如解析<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
- 配置
配置1.png
配置2.png
- 設(shè)置非ARC標(biāo)記
設(shè)置非ARC標(biāo)記.png
- 具體用法
// 加載整個(gè)文檔
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;