XML解析

一、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的用法

    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)代理方法
/**
 * 解析到某個元素的結(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_1.png
  • 配置


    Snip20150811_2.png
    Snip20150811_2.png
Snip20150811_3.png
Snip20150811_3.png
  • 設(shè)置非ARC標(biāo)記


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

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

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