XMLSAX 和DOM解析數(shù)據(jù)

//解析XML文件有兩種方式:

//1SAX解析:基于時間驅(qū)動的解析方式逐行解析(采用協(xié)議回調(diào)機制)解析過程若發(fā)現(xiàn)錯誤則停止解析使用系統(tǒng)提供的NSXMLParser進行解析OC級別的

//2DOM解析:先讀取完整個文檔內(nèi)容在內(nèi)存中形成樹的結(jié)構(gòu)可以根據(jù)節(jié)點關(guān)系訪問樹的i并獲取每個節(jié)點包含的數(shù)據(jù)可以使用系統(tǒng)提供的一個基于C語言的庫libxml2有一些第三方的解析工具:GDataXMLNode:google提供的基于libxml2,進行了OC的封裝

SAX

(Document 文檔 ? ? ?Element? 標簽)

1)

1獲取文件路徑

2創(chuàng)建數(shù)據(jù)對象

3創(chuàng)建解析對象

NSXMLParser*xml = [[NSXMLParseralloc]initWithData:data];

4設(shè)置代理

xml.delegate=self;

5開始解析

[xmlparse];

2)

1開始解析文檔

-(void)parserDidStartDocument:(NSXMLParser

*)parser

{

self.arr= [NSMutableArrayarrayWithCapacity:30];

}

2)model的預(yù)創(chuàng)建

-(void)parserDidStartDocument:(NSXMLParser

*)parser{

self.arr= [NSMutableArrayarrayWithCapacity:30];

}

-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName attributes:(NSDictionary*)attributeDict{

_currentElement= elementName;

if([elementNameisEqualToString:@"student"

]) {

Student*stu = [Studentnew

];

[

_arraddObject

:stu];

}

}

3)讀取標簽的值

-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string{

Student*stu = [_arrlastObject

];

[stu

setValue:stringforKey:_currentElement

];

}

4)結(jié)束標簽解析

-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString

*)qName{

_currentElement=nil

;

}

5)結(jié)束文檔解析

-(void)parserDidEndDocument:(NSXMLParser*)parser{

for(Student*perin_arr

) {

NSLog(@"%@"

,per);

}

}

DOM

1獲取文路徑

2創(chuàng)建data對象

3創(chuàng)建GDataXMLDocument對象

NSError*error;

GDataXMLDocument*xmlDocument = [[GDataXMLDocumentalloc]initWithData:dataoptions:0error:&error];

4獲取根節(jié)點

GDataXMLElement*rootElement = [xmlDocumentrootElement];

5創(chuàng)建解析數(shù)組

self.arr= [NSMutableArraynew];

6遍歷子節(jié)點

for(GDataXMLElement*subElementinrootElement.children) {

Student*stu = [Studentnew];

for(GDataXMLElement*contactElementinsubElement.children) {

[stusetValue:contactElement.stringValueforKeyPath:contactElement.name];

NSLog(@"%@",contactElement.stringValue

);

NSLog(@"%@",contactElement.name);

}

7添加進數(shù)組

[_arraddObject

:stu];

}

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

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

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