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<NSString *,NSString *> *)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,接着按照框架注释配置编译器


Snip20160604_4.png

Snip20160604_2.png

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


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];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 使用NSURLConnection来请求数据 JSON数据的请求 现在大多情况下都使用三方框架来完成的 l在iOS...
    iamgaoshuai阅读 3,704评论 0 1
  • XML简单介绍 什么是XMLXML:可扩展标记语言a.语法b.XML文档的三部分(声明、元素和属性)c.其它注意点...
    Mario_ZJ阅读 3,294评论 0 2
  • 一、什么是XML 全称是ExtensibleMarkupLanguage,译作“可扩展标记语言” 跟JSON一样,...
    小胖子2号阅读 4,750评论 0 2
  • JSON 1.JSON是一种轻量级的数据格式,一般都是用于数据交互2.服务器返回给客户端的数据,一般都是JSON格...
    Little_Dragon阅读 5,337评论 0 5
  • 我们曾许下过誓言,在蔚蓝的天空下,举着右手,许下了我们的梦想。在追梦的路上,我们一再跌倒,不被理解,不被支持,如今...
    朱程亮阅读 2,675评论 0 1

友情链接更多精彩内容