解析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;}

搞定:看结果:
解析XML

2 0
原创粉丝点击