iOS-XML文件解析(原生NSXMLParser和GDataXML两种解析方式)

原创 2016年08月30日 14:36:41

XML文件解析常用的两种方式一种为苹果原生的NSXMLParser,另外一种为第三方GDataXML

1.原生的NSXMLParser方式:

//*利用 NSXMLParser 方式
-(void)XMLParserWithData:(NSData *)data{
    //1.创建NSXMLParser
    NSXMLParser *XMLParser = [[NSXMLParser alloc] initWithData:data];
    //2.设置代理
    [XMLParser setDelegate:self];
    //3.开始解析
    [XMLParser parse];
}

在代理方法中进行数据解析

#pragma mark - NSXMLParserDelegate
//1.开始解析XML文件
-(void)parserDidStartDocument:(NSXMLParser *)parser{
    NSLog(@"开始解析XML文件");
}
//2.解析XML文件中所有的元素
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{
    NSLog(@"解析XML文件中所有的元素:elementName:%@,attributeDict:%@",elementName,attributeDict);
    if ([elementName isEqualToString:@"video"]) {
        //MJExtension 解析数据
        Model *model = [Model mj_objectWithKeyValues:attributeDict];
        [self.dataArrM addObject:model];
    }
}
//3.XML文件中每一个元素解析完成
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    NSLog(@"XML文件中每一个元素解析完成:elementName:%@,qName:%@",elementName,qName);
}
//4.XML所有元素解析完毕
-(void)parserDidEndDocument:(NSXMLParser *)parser{
    NSLog(@"XML所有元素解析完毕:%@",self.dataArrM);
}

这里写图片描述
这里写图片描述
最终解析完毕,得到自定义模型数组
这里写图片描述
获取到网络数据进行进一步UI主线程操作

2.第三方GDataXML-HTML方式解析XML
GDataXML-HTML github链接:https://github.com/graetzer/GDataXML-HTML

下载后项目结构如下,将classes文件中两个源文件拖到项目中
这里写图片描述

在将框架拖到项目中之后直接运行会报如下错误信息:
这里写图片描述

在GDataXML框架中已经明确说明了解决方法

// libxml includes require that the target Header Search Paths contain
//
//   /usr/include/libxml2
//
// and Other Linker Flags contain
//
//   -lxml2

根据他说明的进行两步配置:
配置1:
这里写图片描述
配置2:
这里写图片描述

根据他说明的两步配置都成功之后,再次运行就不会报错了.接下来进行XML文件解析:

导入头文件: 
#import "GDataXMLNode.h"


//*利用 GDataXMLNode 方式
-(void)XMLGDataXMLNodeWithData:(NSData *)data{
    //1.加载XML数据
    GDataXMLDocument *XMLDocument = [[GDataXMLDocument alloc] initWithData:data error:nil];
    //2.拿到XML文件中根元素下需要解析的子元素数组
    NSArray *elements = [XMLDocument.rootElement elementsForName:@"video"];
    //3.对子元素数组中所有数据进行解析
    [elements enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        GDataXMLElement *XMLElement = (GDataXMLElement *)obj;
        NSLog(@"XMLElement:%@",XMLElement);
        //打印发现 GDataXMLElement 对象是对每条数据进行了一层封装,可将其转化为字典进行字典模型转换
        Model *model = [[Model alloc] init];
        model.ID = [XMLElement attributeForName:@"id"].stringValue;
        model.name = [XMLElement attributeForName:@"name"].stringValue;
        model.image = [XMLElement attributeForName:@"image"].stringValue;
        model.url = [XMLElement attributeForName:@"url"].stringValue;
        [self.dataArrM addObject:model];
    }];

}

至此,解析成功!
注意在使用GDataXML解析过程中可以自行打印子元素数据,观察有用数据
子元素(GDataXMLElement)打印的数据
这里写图片描述
从中使用 attributeForName 函数抽取有用信息包装成模型,进行主线程UI操作.

完整项目github链接:https://github.com/qxuewei/XWXMLParserDemo

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

IOS学习之十六:网络数据的XML解析

网络应用中的数据解析,因为最近的应用,无论是Android的和ios平台的,一直用也是建议用的都是Json解析, xml解析都有点被遗忘了。 然后最近自己在做着玩一个ios的小应用,涉及网络数据的...

IOS学习:常用第三方库(GDataXMLNode:xml解析库)

一、GDataXMLNode说明 GDataXMLNode是Google提供的用于XML数据处理的类集。该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写...

iOS-系统自带xml解析(自定义封装)

说实话,神他么用过xml解析,只是调了几次这种接口,每次都要写,好麻烦,自己封装一下,以后会有用吧。 首先是基类 #import @interface XmlParse...

iOS下的XML解析

XML解析 一,属性和元素的区别 二,XML的解析方式有两种     SAS:适合大,小文件解析,从上往下,一点,一点读取。苹果推荐     DOMS: 适合小文件...

ios xml解析

iOS中XML解析是本文要介绍的内容,在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML、To...

iOS开发------XML原生解析(NSXMLParser篇)

由于项目需要,最近就研究了一些与视频流相关的知识,在学习的过程中发现,JSON作为轻量级的数据传输格式就显的非常不便.当然,这句话的意思就是说在学习过程中碰到的XML格式数据居多了呗,这时掌握一些XM...

IOS XML解析解析方法SAX

XML 格式 (一) 带属性的XML ...

iOS 详解NSXMLParser方法解析XML数据方法

前一篇文章已经介绍了如何通过URL从网络上获取xml数据。下面介绍如何将获取到的数据进行解析。 下面先看看xml的数据格式吧! Circumference Nicholas Nicastro...

iOS网络数据解析--XML解析详解(GDataXMLNode&原生NSXMLParser)

在iOS开发中,大多数情况下,从网络获取的数据通常分两种。 JSON格式或者XML格式。 JSON是一种轻量级的数据格式,一般用于数据交互 JSON数据类似OC中的字典,解析方式也有很多ios5...

iOS之数据解析之XML解析

XML解析常见的两种方式:DOM解析和SAX解析DOM解析 DOM:Document Object Model(文档对象类型).解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS-XML文件解析(原生NSXMLParser和GDataXML两种解析方式)
举报原因:
原因补充:

(最多只允许输入30个字)