在iOS中,解析XML的手段有很多

苹果原生

NSXMLParser:SAX方式解析,使用简单

第三方框架

libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOM和SAX方式解析

GDataXML:DOM方式解析,由Google开发,基于libxml2

XML解析方式的选择建议

大文件:NSXMLParser,libxml2

小文件:GDataXML,NSXMLParser,libxml2

1.使用NSXMLParser进行解析

        //创建XML解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; //设置代理
parser.delegate = self; //开始解析XML(阻塞式的)
[parser parse];

需要实现NSXMLParserDelegate代理

开始解析XML文档

- (void)parserDidStartDocument:(NSXMLParser *)parser;

XML文档解析完毕

- (void)parserDidEndDocument:(NSXMLParser *)parser;

解析到某个元素的开头

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict;

解析到某个元素的结尾

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName;

我们一般在第三个代理方法(解析到某个元素的开头)进行数据的处理

   if ([elementName isEqualToString:@"root"]) {
return;//不解析根元素
}
//利用MJExtension框架将属性字典转换成模型
DDZVideo *video = [DDZVideo mj_objectWithKeyValues:attributeDict];
[self.videos addObject:video];

2.使用GDataXML进行解析

因为GDataXML不能使用cocoaPods进行加载,

所以我们需要将GDataXML这个文件夹导入到项目中。

导入之后需要进行一些设置,否则将报错

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

1.在Build Settings中

往Header Search Paths添加

/usr/include/libxml2

2.在Build Settings中

往Other Linker Flags添加

-lxml2

3.将项目设置成ARC与MRC混编


        //加载整个文档
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; //获得所有video元素
NSArray *elements = [doc.rootElement elementsForName:@"video"];
for (GDataXMLElement *ele in elements) {
DDZVideo *video = [[DDZVideo alloc] init];
//将里面的属性分别提取
video.name = [ele attributeForName:@"name"].stringValue;
video.url = [ele attributeForName:@"url"].stringValue;
video.image = [ele attributeForName:@"image"].stringValue;
video.length = [ele attributeForName:@"length"].stringValue.intValue;
[self.videos addObject:video];
NSLog(@"%@",video.name);
}

XML解析方案的更多相关文章

  1. 多级xml解析方案

    package com.people.xmlToSql; import java.io.File; import java.io.IOException; import java.io.StringW ...

  2. iOS开发之网络数据解析(二)--XML解析简介

    前言:本篇随笔介绍的是XML解析. 正文: 1.XML解析方式有2两种: DOM:一次性将整个XML数据加载进内存进行解析,比较适合解析小文件 SAX:从根元素开始,按顺序一个元素一个元素往下解析,比 ...

  3. 使用XWAF框架(5)——XML解析器:CXDP

    XWAF推出了自己的组合式XML文档解析器,英文名叫:“CXDP”,是“Combined XML Document Parser”的缩写.核心代码属XWAF原创,注释.日志和帮助文档采用全中文描述,特 ...

  4. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

  5. JavaEE:XML解析

    XML解析技术概述1.XML 技术主要企业应用1)存储和传输数据 2)作为框架的配置文件2.使用xml 存储和传输数据涉及到以下两点1)通过程序生成xml2)读取xml 中数据 ---- xml 解析 ...

  6. XML解析(一) DOM解析

    XML解析技术主要有三种: (1)DOM(Document Object Model)文档对象模型:是 W3C 组织推荐的解析XML 的一种方式,即官方的XML解析技术. (2)SAX(Simple ...

  7. iOS - - JSON 和 XML解析

    JSON 和 XML 一.JSON 1.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 2.JSON的格 ...

  8. XML解析-Dom4j的DOM解析方式更新XML

    Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 1.更新XML 1.1.写出内容到xml文 ...

  9. nodeName,nodeValue未知 xml 入库方案 The ElementTree iterparse Function

    import xml.etree.ElementTree as ET from lxml.html import * from xmljson import badgerfish as bf from ...

随机推荐

  1. JavaScript资源大全

    目录 前端MVC 框架和库 包管理器 加载器 打包工具 测试框架 框架 断言 覆盖率 运行器 QA 工具 基于 Node 的 CMS 框架 模板引擎 数据可视化 编辑器 UI 输入 日历 选择 文件上 ...

  2. WCF双工通讯以及客户端间的间接通讯

    由于学习计划安排不当,对WCF的认知一直停滞不前,最近工作上又用回了WCF,重拾一下,看到蒋老师介绍双工通讯的博文,实践一下,积累一下.原想着WCF的双工通讯就是原本的客户端能调用服务端的方法之余,服 ...

  3. 手机Fildder抓包_监控应用请求

    Fiddler是一个http调试代理,它能 够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断点,以及Fiddle 所有的“进出”的数据(指co ...

  4. 【C#进阶系列】20 异常和状态管理

    异常就是指成员没有完成它的名称所宣示的行动. public class Girl { public string Name { get; set; } } public class Troy{ Gir ...

  5. TSwitch 中文简繁显示支持(XE6 Android)

    说明: XE6 的 TSwitch 做了很多改进,包含多语显示处理,但 XE6 似乎只认定一种中文语系「zh」,它无法处理「zh_TW」.「zh_CN」.「zh_HK」.「zh_SG」等语系,不过可以 ...

  6. EasyUI-datagrid数据展示+MongoDB数据操作

    使用EasyUI-datagrid进行数据展示:进行添加,修改,删除操作逻辑代码,数据源来自MongoDB. 一.新建SiteInfo控制器,添加Index页面:http://www.cnblogs. ...

  7. MSSQL N张表关联查询

    declare @newTime varchar(50); declare @lasetTime varchar(50); set @newTime= getdate(); set @lasetTim ...

  8. 第十一届“蓝狐网络杯”湖南省大学生计算机程序设计竞赛 B - 大还是小? 字符串水题

    B - 大还是小? Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Description 输入两个实数,判断第一个数大 ...

  9. 【FOL】第三周

    这周还是在改自己的这个框架,被多线程折腾了两天,最终无奈放弃在游戏启动时调用引擎进行图片相关资源的初始化,当然进展还是不错的. 嗯,下面还是以流水的方式继续记录一下本周完成的工作: 1.调通了客户端与 ...

  10. linux下搭建php的集成环境

    一个偶然的机会,在项目中需要搭建PHP的环境,由于PHP开发需要的东西比较多,像apache.mysql.PHP环境等,如果一个一个装很可能会有安装不全的问题,为此选择了安装集成环境,这里选择的是xa ...