网络:XML 解析
2016-04-07 15:59
537 查看
#import "ViewController.h" #import "CZVideo.h" @interface ViewController ()<NSXMLParserDelegate> @property (nonatomic, strong) NSMutableArray *videos; @property (nonatomic, strong) CZVideo *currentVideo; // 当前解析的模型 @property (nonatomic, strong) NSMutableString *elementString; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { // NSURL NSURL *url = [NSURL URLWithString:@"http://localhost/videos.xml"]; // 创建请求 NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:15]; // 异步发送请求 [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { NSXMLParser *xml = [[NSXMLParser alloc]initWithData:data]; // 设置代理 xml.delegate = self; [xml parse]; // NSLog(@"response = %@ data = %@",response,data); // NSLog(@"%@",xml); }]; } // 到现在还没有一个好用的第三方 // 做即时通讯 xmpp (xml) #pragma mark - xml 解析代理 - (void)parserDidStartDocument:(NSXMLParser *)parser { NSLog(@"1. 开始文档"); // 创建一个可变数组 self.videos = [NSMutableArray array]; } // 2,3,4 是循环 - (void)parser:(NSXMLParser *)parser didStartElement:(nonnull NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(nonnull NSDictionary<NSString *,NSString *> *)attributeDict { NSLog(@"2.发现节点%@",elementName); NSLog(@"节点属性%@",attributeDict); // 如果是video 创建模型, 并且做成属性保存起来(current) if ([elementName isEqualToString:@"video"]) { self.currentVideo = [[CZVideo alloc]init]; } // 初始化拼接字符串(没有使用懒加载) // self.elementString = [NSMutableString string]; // 使用懒加载(清掉string) [self.elementString setString:@""]; } // 3. 可能调用多次 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { NSLog(@"3. 发现节点内容 = %@",string); // 拼接节点内容(可变字符串) [self.elementString appendString:string]; } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { NSLog(@"4. 结束节点 %@",elementName); // 其他的就设置模型的属性值 // if ([elementName isEqualToString:@"name"]) { // self.currentVideo.name = self.elementString; // }else if ([elementName isEqualToString:@"length"]) { // self.currentVideo.length = self.elementString; // }else if ([elementName isEqualToString:@"videoURL"]) { // self.currentVideo.videoURL = self.elementString; // }else if ([elementName isEqualToString:@"imageURL"]) { // self.currentVideo.imageURL = self.elementString; // }else if ([elementName isEqualToString:@"desc"]) { // self.currentVideo.desc = self.elementString; // }else if ([elementName isEqualToString:@"teacher"]) { // self.currentVideo.teacher = self.elementString; // } if ([elementName isEqualToString:@"video"]) { // 如果是video 把模型保存到数组 [self.videos addObject:self.currentVideo]; }else if (![elementName isEqualToString:@"videos"]) { // kvc 设值 [self.currentVideo setValue:self.elementString forKey:elementName]; } // 妙果是videos 不需要做任务操作 } - (void)parserDidEndDocument:(NSXMLParser *)parser { NSLog(@"5. 结束文档"); NSLog(@"%@",self.videos); } - (NSMutableString *)elementString { if (_elementString == nil) { _elementString = [NSMutableString string]; } return _elementString; } @end
#import <Foundation/Foundation.h> @interface CZVideo : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *length; @property (nonatomic, copy) NSString *videoURL; @property (nonatomic, copy) NSString *imageURL; @property (nonatomic, copy) NSString *desc; @property (nonatomic, copy) NSString *teacher; @end #import "CZVideo.h" @implementation CZVideo @end
相关文章推荐
- IOS 笔记大全 (UI控件到网络协议)
- Java使用socket网络编程实现多人聊天室
- 网络图片获取并转换为Base64字符串
- 网络:Plist 解析
- 网络:JSONKit框架的使用(天气预报)
- muduo网络库使用心得
- 神经网络研究,计算机是否能推理?
- 网络原理,以及对VMware Workstation虚拟网络VMnet0、VMnet1、VMnet8的图解
- TCP server 为什么一个端口可以建立多个连接?(网络讨论)
- 惠普打印机头部打印GET /Devmgmt/DiscoveryTree.xml HTTP/1.1 Host: 127.0.0.1:8080解决办法
- 太原网络营销师如何分析及考核百度竞价(SEM)人员
- iOS 使用AFNetWorking监听APP网络状态变化(可用于更改缓存策略、提示网络等)
- Http,Https (SSL)的Url绝对路径,相对路径解决方案Security Switch 4.2 中文帮助文档
- [网络技术][转]网卡的offload概念
- Nginx + Tomcat + HTTPS 配置不需要在 Tomcat 上启用 SSL 支持
- 软件工程师的视角看网络(网络那点事)
- 通用套接字选项和TCP套接字选项
- tinyos学习笔记12--与网络相关的重要结构体索引
- Http协议与TCP协议简单理解
- 初识-----基于Socket的UDP和TCP编程及测试代码