iOS 【网端数据解析 JSON(MJExtension)& XML(NSXMLParser/GDataParser)】
来源:互联网 发布:荣耀三九年 知乎 编辑:程序博客网 时间:2024/06/05 16:02
截取案例中请求数据的部分,以加载成功模型数组self.videos为准。
① JSON 解析 —— MJExtension
- (void)getData { // 请求数据JSON解析,并保存到模型数组中 [[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/video?type=JSON"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { // NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); // 检查结果为字典 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; // NSLog(@"%@", dict); NSArray *arr = dict[@"videos"]; // 将模型中的ID属性用id替换一下 [WZYVideo mj_setupReplacedKeyFromPropertyName:^NSDictionary *{ return @{@"ID" : @"id"}; }]; self.videos = [WZYVideo mj_objectArrayWithKeyValuesArray:arr]; dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; }); }] resume];}
② XML 解析 —— NSXMLParser(系统自带的解析XML的类)
- (void)getData { // 请求数据JSON解析,并保存到模型数组中 [[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/video?type=XML"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { // XML解析(XML和JSON在本质上就是字符串,带有特殊格式的字符串) // 1 创建解析器 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; // 2 设置delegate parser.delegate = self; // 3 开始解析 [parser parse]; dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; }); }] resume];}该方法需要配合 NSXMLParserDelegate 一起使用
#pragma mark - NSXMLParserDelegate//01 开始解析XML文档的时候调用- (void)parserDidStartDocument:(NSXMLParser *)parser { NSLog(@"parserDidStartDocument---开始解析XML文档");}//02 开始解析某个元素的时候调用 该方法会调用多次- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict { NSLog(@"didStartElement---开始解析单个元素---%@, %@", elementName, attributeDict); if ([elementName isEqualToString:@"videos"]) { return; } //01 把字典转换为模型 WZYVideo *video = [WZYVideo mj_objectWithKeyValues:attributeDict]; //02 把模型添加到数组 [self.videos addObject:video];}//03 某个元素解析完毕的时候调用 该方法会调用多次-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ NSLog(@"didEndElement---单个元素解析完毕");}//04 整个XML文档解析完毕的时候调用-(void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"parserDidEndDocument---整个XML文档解析完毕"); // dispatch_async(dispatch_get_main_queue(), ^{// [self.tableView reloadData];// });}
③ XML 解析 —— GDataParser(Google 开发的一款框架)
如果使用此第三方框架,需要进行一些配置:
(2)设置libxml2的头文件搜索路径(为了能找到libxml2库的所有头文件)
(3)设置链接参数(自动链接libxml2库)
- (void)getData { // 请求数据XML解析,并保存到模型数组中 [[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/video?type=XML"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { //GDataXML来解析数据 //01 加载整个XML文档 GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:data options:kNilOptions error:nil]; //02 得到根元素 根据根元素得到内部所有名称为video的子元素(返回一个数组) NSArray *eles = [doc.rootElement elementsForName:@"video"]; //03 遍历所有的子元素,得到子元素中的属性 for (GDataXMLElement *ele in eles) { WZYVideo *video = [[WZYVideo alloc]init]; video.ID = [ele attributeForName:@"id"].stringValue; video.image = [ele attributeForName:@"image"].stringValue; video.length = [ele attributeForName:@"length"].stringValue; video.name = [ele attributeForName:@"name"].stringValue; video.url = [ele attributeForName:@"url"].stringValue; [self.videos addObject:video]; } dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; }); }] resume];}
4 0
- iOS 【网端数据解析 JSON(MJExtension)& XML(NSXMLParser/GDataParser)】
- iOS XML解析 - NSXMLParser
- NSXMLParser解析XML数据
- XML解析(NSXMLParser、GDataXML)
- swift解析XML(NSXMLParser)
- iOS Json解析框架之MJExtension使用详解(转)
- iOS网络数据解析--XML解析详解(GDataXMLNode&原生NSXMLParser)
- iOS之数据解析 (JSON 、XML)
- ios 数据解析(XML,JSON)
- 【ios】通过NSXMLParser解析xml
- ios NSXmlparser方法 XML解析
- IOS内置NSXMLParser解析xml
- iOS-XML文档解析(NSXMLParser)
- ios解析xml的两种方法,NSXMLParser和第三方库GDataXMLNode还有json数据的解析
- 使用NSXMLParser解析XML数据
- 使用NSXMLParser解析XML数据
- iOS 详解NSXMLParser方法解析XML数据方法
- IOS 详解NSXMLParser方法解析XML数据方法
- 从皇后问题到图搜索
- android反编译工具
- POJ3666
- Redis 集群方案
- Android AutoLayout全新的适配方式 堪称适配终结者
- iOS 【网端数据解析 JSON(MJExtension)& XML(NSXMLParser/GDataParser)】
- linux进程PCB--task_struct
- UIWebView网页视图—IOS开发
- ubuntu mongodb3.0安装
- 给IE浏览器增加自定义右键菜单
- myeclipse生成方法注释的快捷键
- 读DL论文心得之Fast RCNN代码运行实验
- linux线程的实现
- 《Android开发艺术探索》读书笔记