加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解析XML

发布时间:2020-12-16 00:10:05 所属栏目:百科 来源:网络整理
导读:由于我们搭建好了Apache服务器,那么我们接下来看一下如何解析服务器返回的xml文件 虽然开发中,服务器返回的xml格式的数据较少,但是偶尔还是会有的。 由于解析xml没有比较好的第三方框架,所以我们还是乖乖的苦逼的写代码,虽然说,代码没有难度 xml数据:
  • 由于我们搭建好了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;
}

搞定:看结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读