XMLSAX 和DOM解析数据

//解析XML文件有两种方式:

//1SAX解析:基于时间驱动的解析方式逐行解析(采用协议回调机制)解析过程若发现错误则停止解析使用系统提供的NSXMLParser进行解析OC级别的

//2DOM解析:先读取完整个文档内容在内存中形成树的结构可以根据节点关系访问树的i并获取每个节点包含的数据可以使用系统提供的一个基于C语言的库libxml2有一些第三方的解析工具:GDataXMLNode:google提供的基于libxml2,进行了OC的封装

SAX

(Document 文档      Element  标签)

1)

1获取文件路径

2创建数据对象

3创建解析对象

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

4设置代理

xml.delegate=self;

5开始解析

[xmlparse];

2)

1开始解析文档

-(void)parserDidStartDocument:(NSXMLParser

*)parser

{

self.arr= [NSMutableArrayarrayWithCapacity:30];

}

2)model的预创建

-(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)结束标签解析

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

*)qName{

_currentElement=nil

;

}

5)结束文档解析

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

for(Student*perin_arr

) {

NSLog(@"%@"

,per);

}

}

DOM

1获取文路径

2创建data对象

3创建GDataXMLDocument对象

NSError*error;

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

4获取根节点

GDataXMLElement*rootElement = [xmlDocumentrootElement];

5创建解析数组

self.arr= [NSMutableArraynew];

6遍历子节点

for(GDataXMLElement*subElementinrootElement.children) {

Student*stu = [Studentnew];

for(GDataXMLElement*contactElementinsubElement.children) {

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

NSLog(@"%@",contactElement.stringValue

);

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

}

7添加进数组

[_arraddObject

:stu];

}

你可能感兴趣的:(XMLSAX 和DOM解析数据)