IOS中的XML解析之DOM和SAX,iosxmldomsax
dom是w3c指定的一套規範標準,核心是按樹形結構處理資料,dom解析器讀入xml檔案並在記憶體中建立一個結構一模一樣的“樹”,這樹各節點和xml各標記對應,通過操縱此“樹”來處理xml中的檔案。xml檔案很大時,建立的“樹”也會大,所以會大量佔用記憶體。
sax解析器核心是事件處理機制。例如解析器發現一個標記的開始標記時,將所發現的資料會封裝為一個標記開始事件,並把這個報告給事件處理器,事件處理器再調用方法(startElement)處理髮現的資料。下面我們嘗試一下SAX和DOM解析:
XML格式如下:
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的內容
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/
本文著作權歸煙台傑瑞教育科技有限公司和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。