XML解析之DOM解析

来源:互联网 发布:宏业斯维尔软件 编辑:程序博客网 时间:2024/06/04 23:26

XML解析之DOM解析

1. 为什么要进行数据解析?

我们从服务器上获取的数据都是二进制的数据,客户端是无法直接使用的.就需要把二进制数据转化为客户端可以直接使用的OC对象

2. 从服务器获取的二进制数据有哪些

  • 1 html
  • 2 图片
  • 3 视频
  • 4 音频
  • 5 zip
  • 6 json
  • 7 xml
  • …..

而这其中我们最常见的莫过于JSON,偶尔也会有XML的出现,而今天我的重点就是讲解小众的XML解析.XML的解析方式有两种,一种是SAX解析(比较繁琐),第二种就是我们今天要说的DOM解析

3. 用到的框架

因为iOS系统不支持DOM解析,所以我们就需要用到框架,比较常用的就是GData,下面给出一张图帮助大家理解这个框架
这里写图片描述

在这里我把自己遇见的问题也一并列出,当我们导入框架的时候会报错,下图为解决方法
这里写图片描述

4. GData解析XML的步骤

  • 1 获取XML文档
  • 2 获取XML文档的根标签
  • 3 遍历根标签,获取根标签的子标签(video标签),创建video标签对应的模型对象.
  • 4 遍历video标签,获取video标签的子标签,给模型对象的属性赋值.
  • 5 遍历video标签,获取video标签的属性,给模型对象的videoId属性赋值.

5. GData解析XML的代码实现(只罗列核心代码,至于模型的话根据不同情况自定义即可)

-(void)DOM:(NSData *)data{    // 1.获取XML文档    GDataXMLDocument *XMLDocument = [[GDataXMLDocument alloc] initWithData:data error:NULL];    // 2.获取XML文档的根标签    GDataXMLElement *rootElement = XMLDocument.rootElement;    // 创建模型数组,将模型对象添加到模型数组中    NSMutableArray *videoM = [NSMutableArray array];    // 3.遍历根标签,获取根标签的子标签(video标签),创建video标签对应的模型对象    for (GDataXMLElement *videoElement in rootElement.children) {        // 创建video标签对应的模型对象        VideoModel *video = [[VideoModel alloc] init];        // 将模型对象添加到模型数组中        [videoM addObject:video];        // 4.遍历video标签,获取video标签的子标签,给模型对象的属性赋值        for (GDataXMLElement *subElement in videoElement.children) {            // KVC给模型的属性赋值            [video setValue:subElement.stringValue forKey:subElement.name];        }        // 5.遍历video标签,获取video标签的属性,给模型对象的videoId属性赋值        NSLog(@"%@",[videoElement.attributes class]);        for (GDataXMLNode *K        in videoElement.attributes) {            // KVC给模型的videoId属性赋值            [video setValue:attr.stringValue forKey:attr.name];        }    }    NSLog(@"%@",videoM);}

最后,我想说一句:如果遇见数据是XML,那就..那就…忍了吧!!!

0 0