解析XML
来源:互联网 发布:实况足球2018球员数据 编辑:程序博客网 时间:2024/06/06 03:39
- 由于我们搭建好了Apache服务器,那么我们接下来看一下如何解析服务器返回的xml文件
- 虽然开发中,服务器返回的xml格式的数据较少,但是偶尔还是会有的。
- 由于解析xml没有比较好的第三方框架,所以我们还是乖乖的苦逼的写代码,虽然说,代码没有难度
xml数据:
<videos><video videoId="1"><name>张三</name><teacher>张老师</teacher></video></videos>
- 首先从服务器获取回来数据先
NSURL *url = [NSURL URLWithString:@"http://localhost/videos.xml"]; NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:10.0]; [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { //创建xml解析器 NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data]; //设置代理 parser.delegate = self; //开始解析 [parser parse]; }];
- 我们依次的看一下我们要用到的代理方法
开始解析调用(只会调用一次)
- (void)parserDidStartDocument:(NSXMLParser *)parser { NSLog(@"1.开始文档");}
每发现一个开始节点就调用
/** * 每发现一个节点就调用 * * @param parser 解析器 * @param elementName 节点名字 * @param attributeDict 属性字典 */ * (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict{ NSLog(@"2.发现节点:%@",elementName); if ([elementName isEqualToString:@"video"]) { //创建模型对象 self.video = [[ZYVideo alloc]init]; } [self.elementNameString setString:@""];}
发现节点内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ NSLog(@"3.发现节点内容:%@",string); //把发现的内容进行拼接 [self.elementNameString appendString:string];}
发现结束节点
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName{ NSLog(@"3.发现结束节点 %@",elementName);// NSLog(@"拼接的内容%@",self.elementNameString); if ([elementName isEqualToString:@"name"]) { self.video.name = self.elementNameString; }else if ([elementName isEqualToString:@"teacher"]) { self.video.teacher = self.elementNameString; }}
解析完毕调用
- (void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"解析完毕---------"); NSLog(@"%@",self.video);}
- 提前做好的懒加载:
#pragma mark - 懒加载- (NSMutableString *)elementNameString{ if (_elementNameString == nil) { _elementNameString = [[NSMutableString alloc]init]; } return _elementNameString;}
搞定:看结果:
2 0
- XML解析
- xml解析
- XML解析
- 解析XML
- xml解析
- 解析xml
- 解析xml
- xml解析
- XML解析
- xml解析
- XML解析
- xml解析
- xml解析
- xml解析
- xml解析
- xml解析
- 解析xml
- XML解析
- 加密算法比较3DES AES RSA ECC MD5 SHA1等
- 混淆器生成文件的作用
- tomcat下发布的网站使用域名直接访问的方法
- java 树
- 月薪3万的程序员告诉你:这样工作才能拿高薪
- 解析XML
- 鸟哥 linux
- 操作系统和编译器如何识别全局变量和局部变量
- Http通讯
- JNI概念
- Android布局中按钮的设置规则,设置按钮单击事件的三种方法
- java 遍历一个list的时候 然后修改 会报错
- 如果要创业,你应该如何选择创业方向?
- Restful架构