IOS中的XML解析之DOM和SAX,iosxmldomsax

來源:互聯網
上載者:User

IOS中的XML解析之DOM和SAX,iosxmldomsax

一、介紹

  dom是w3c指定的一套規範標準,核心是按樹形結構處理資料,dom解析器讀入xml檔案並在記憶體中建立一個結構一模一樣的“樹”,這樹各節點和xml各標記對應,通過操縱此“樹”來處理xml中的檔案。xml檔案很大時,建立的“樹”也會大,所以會大量佔用記憶體。
  sax解析器核心是事件處理機制。例如解析器發現一個標記的開始標記時,將所發現的資料會封裝為一個標記開始事件,並把這個報告給事件處理器,事件處理器再調用方法(startElement)處理髮現的資料。下面我們嘗試一下SAX和DOM解析:

  XML格式如下:

二、SAX:

  1、我們用SAX解析的時候用的是蘋果內建的NSXMLParser,首先初始化一個解析器,通過設定代理開始解析,代碼如下:

//初始化路徑  NSString * path=[[NSBundle mainBundle] pathForResource:@"Test.xml" ofType:nil];  NSData * data=[NSData dataWithContentsOfFile:path];  //初始化解析器 NSXMLParser * parser=[[NSXMLParser alloc] initWithData:data];//設定代理 parser.delegate=self;//開始解析 [parser parse];

  2、通過代理方法開始解析,由於sax方式是事件驅動,因此解析是按照順序解析,如果想擷取標籤的資料我們需要監控每個步驟的解析情況,因此系統提供了代理方法給我們,下面便是常用代理方法:

//開始載入文檔- (void)parserDidStartDocument:(NSXMLParser *)parser{}//結束載入文檔- (void)parserDidEndDocument:(NSXMLParser *)parser{}//開始解析標籤- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{}//標籤解析結束- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{}//讀取標籤之間的文本- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{    content=string;}

  3、XM有兩種存值方式,一個是屬性,一個是標籤之間的文本。如果我們想擷取屬性需要在代理方法中擷取,

 

如果是擷取標籤之間的文本需要採用代理方法

 

總結:通過給定代理方法的結合我們便可以輕鬆的擷取XML的內容

三、DOM

1、我們用DOM解析的時候用的是第三方架構GDataXMLNode,該架構為動態庫。我們需要引入如下:

  同時需要引入第三方支援架構:

  DOM解析相對於SAX稍微簡單一些,DOM 首先將整個檔案全部放入記憶體。然後在記憶體中以二叉樹的形式擷取裡面的元素內容。

  涉及到的主要類:

GDataXMLDocument //整個文檔

GDataXMLElement  //節點對象

GDataXMLNode     //屬性節點對象

  我們可以用以下方法解析資料

//初始化 //將檔案加入到記憶體GDataXMLDocument * document=[[GDataXMLDocument alloc] initWithData:data options:0 error:nil];  //擷取根項目    GDataXMLElement  * root=document.rootElement;//擷取所有該名稱的子節點-(NSArray *)elementsForName:(NSString *)name;//根據名稱擷取屬性值-(GDataXMLNode*)attributeForName:(NSString *)name;

  這樣我們便可以輕鬆解析並且擷取XMl的值了,

 

  想要瞭解更多內容的小夥伴,可以點擊查看源碼,親自運行測試。

  疑問諮詢或技術交流,請加入官方QQ群: (452379712)

 

作者:傑瑞教育
出處:http://www.cnblogs.com/jerehedu/ 
本文著作權歸煙台傑瑞教育科技有限公司和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.