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

【iOS开发-网络】两种常用的方法解析XML数据

发布时间:2020-12-16 06:17:27 所属栏目:百科 来源:网络整理
导读:解析XML数据常用的有两种方法 第一种 使用Google的GDataXMLNode解析XML数据 使用的是DOM方式解析 先把xml一口吞掉 然后一点一点的解析 第二种 使用苹果自带的NSXMLParser解析XML数据 使用的是SAX方式解析 一个标记一个标记的解析 第一种使用步骤 第一步 首先

解析XML数据常用的有两种方法

第一种

使用Google的GDataXMLNode解析XML数据
使用的是DOM方式解析
先把xml一口吞掉 然后一点一点的解析

第二种

使用苹果自带的NSXMLParser解析XML数据
使用的是SAX方式解析
一个标记一个标记的解析

第一种使用步骤

第一步

首先把GDataXML文件夹放入项目中

第二步

更改Bulid Setting里面的东西

更改头文件搜索路径

在Header Search Paths里面添加路径/usr/include/libxml2

在Other Linker Flags里面添加-lxml2

把GDataXMLNode.m文件改为非ARC环境

第三步引入头文件

#import "GDataXML/GDataXMLNode.h"

代码

//加载整个文档
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];

//拿到跟元素
GDataXMLElement *rootElement = doc.rootElement;

//拿到所有的video元素
NSArray *elements= [rootElement elementsForName:@"video"];

//遍历数组
for (GDataXMLElement *elem in elements) {
    Video *video = [[Video alloc] init];

    video.ID = [elem attributeForName:@"id"].stringValue;
    video.length = [elem attributeForName:@"length"].stringValue;
    video.name = [elem attributeForName:@"name"].stringValue;
    video.image = [elem attributeForName:@"image"].stringValue;
    video.url = [elem attributeForName:@"url"].stringValue;

    [self.videos addObject:video];
}

第二种解析的使用方法

这个方法是苹果提供的,需要设置代理方法

每当碰见一个标记的话就会调用代理方法

//创建解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];

//设置解析器的代理
parser.delegate = self;

//开始解析
[parser parse];//这是一个同步操作

代理方法

/** * 解析到文档的开头时会调用 */
- (void)parserDidStartDocument:(NSXMLParser *)parser
{

}

/** * 解析到一个元素的开始就会调用 * *  @param elementName 元素名称 *  @param attributeDict 属性字典 */
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([@"videos" isEqualToString:elementName]) return;

    HMVideo *video = [HMVideo videoWithDict:attributeDict];
    [self.videos addObject:video];
}

/** * 解析到一个元素的结束就会调用 * *  @param elementName 元素名称 */
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{

}

/** * 解析到文档的结尾时会调用(解析结束) */
- (void)parserDidEndDocument:(NSXMLParser *)parser
{

}

(编辑:李大同)

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

    推荐文章
      热点阅读