XML数据解析

解析来自服务器返回的XML数据,介绍两种方式:
1,NSXMLParser解析器 : SAX方式解析(从根元素开始,按顺序一个一个的解析,适合解析大文件);
2,GDataXML : DOM方式解析(一次性将整个XML文档加载进内存,适合解析小的文件);

1 NSXMLParser

1, 确认请求路径

NSURL *url = [NSURL URLWithString:@"xxx"];

2, 创建会话对象

NSURLSession *session = [NSURLSession sharedSession];

3, 创建请求Task

NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:
^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //创建XML解析器 NSXMLParser(SAX---从根元素一个元素一个元素的解析)
        NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
        //设置代理
        parser.delegate = self;
        //开始解析(同步是会阻塞当前执行路径)
        [parser parse];
}];

4,执行Task

[dataTask resume];

5,代理方法

//1.当开始解析整个XML文档的时候回调用
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    NSLog(@"parserDidStartDocument");
}

//2.开始解析某个元素的时候调用(调用多次)
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:
(NSDictionary *)attributeDict
{
    NSLog(@"didStartElement %@元素开始解析--%@",elementName,attributeDict);
}

//3.某个元素解析完毕的时候调用
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    NSLog(@"didEndElement--%@元素解析完毕",elementName);
}

//4.整个XML文档解析完毕的时候调用
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"parserDidEndDocument");
}

2 GDataXML

使用此方法解析,需先导入一个框架:GDataXML,接着按照框架注释配置编译器


XML数据解析_第1张图片
Snip20160604_4.png

XML数据解析_第2张图片
Snip20160604_2.png

GDataXML框架是MRC的,所以还需要告诉编译器以MRC的方式处理GDataXML的代码


XML数据解析_第3张图片
Snip20160604_3.png

1, 确认请求路径
NSURL *url = [NSURL URLWithString:@"xxx"];

2, 创建会话对象

NSURLSession *session = [NSURLSession sharedSession];

3, 创建请求Task

NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:
^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//加载XML文档
        GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:data options:0 error:nil];
//获得根元素  得到根元素内部所有名字为abc的子元素
        NSArray *eles = [doc.rootElement elementsForName:@"abc"];
}];

4,执行Task

[dataTask resume];

你可能感兴趣的:(XML数据解析)