通过soap请求webservice时,返回的数据是XML类型,有时候也需要解析本地的xml数据等,苹果自带类NSXMLParser解析xml还是很方便的,简单轻便

本文以解析本地XML为例,网络获取到的返回值只需转换成NSData型,解析是同理

需要解析的xml文件如下,users.xml

01
<?xml version="1.0" encoding="UTF-8"?>
02
<AllUsers>
03
    <message>用户信息</message>
04
    <user>
05
        <name>芳仔小脚印</name>
06
        <age>10</age>
07
        <school>JiangSu University</school>
08
    </user>
09
    <user>
10
        <name>毒虫</name>
11
        <age>22</age>
12
        <school>NanJing University</school>
13
    </user>
14
    <user>
15
        <name>女神</name>
16
        <age>23</age>
17
        <school>HongKong University</school>
18
    </user>
19
</AllUsers>
我们用一个数组来存放,最终数据结构为

01
(
02
        {
03
        message = "用户信息";
04
    },
05
        {
06
        age = 10;
07
        name = "芳仔小脚印";
08
        school = "JiangSu University";
09
    },
10
        {
11
        age = 22;
12
        name = "毒虫";
13
        school = "NanJing University";
14
    },
15
        {
16
        age = 23;
17
        name = "女神";
18
        school = "HongKong University";
19
    }
20
)
解析步骤

一、声明代理 NSXMLParserDelegate

二、解析

01
// 遇到节点message和user时作为一个字典存放
02
    NSArray *keyElements = [[NSArray alloc] initWithObjects:@"message",@"user", nil];
03
    // 需要解析的字段
04
    NSArray *rootElements = [[NSArray alloc] initWithObjects:@"message",@"name",@"age",@"school", nil];
05
    // 获取xml文件的路径
06
    NSString *xmlPath = [[NSBundle mainBundle] pathForResource:@"users" ofType:@"xml"];
07
    // 转化为Data
08
    NSData *data = [[NSData alloc] initWithContentsOfFile:xmlPath];
09
     
10
    // 初始化
11
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];
12
     
13
    // 代理
14
    xmlParser.delegate = self;
15
    // 开始解析
16
    BOOL flag = [xmlParser parse];
17
    if (flag) {
18
        NSLog(@"解析成功");
19
    }
20
    else{
21
        NSLog(@"解析出错");
22
    }
中间变量,在.m的interface的中定义

1
NSString *currentElement;
2
     
3
    NSString *currentValue;
4
     
5
    NSMutableDictionary *rootDic;
6
     
7
    NSMutableArray *finalArray;
代理方法

01
#pragma - mark 开始解析时
02
-(void)parserDidStartDocument:(NSXMLParser *)parser
03
{
04
    // 用数组存储每一组信息
05
    finalArray = [[NSMutableArray alloc] init];
06
     
07
     
08
}
09
#pragma - mark 发现节点时
10
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
11
{
12
    for(NSString *key in self.keyElements){
13
        if ([elementName isEqualToString:key]) {
14
            // 关键节点开始时,初始化一个字典来存放值
15
            rootDic = nil;
16
             
17
            rootDic = [[NSMutableDictionary alloc] initWithCapacity:0];
18
             
19
        }
20
        else {
21
            for(NSString *element in self.rootElements){
22
                if ([element isEqualToString:element]) {
23
                    currentElement = elementName;
24
                    currentValue = [NSString string];
25
                }
26
            }
27
        }
28
    }
29
     
30
}
31
#pragma - mark 发现节点值时
32
 
33
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
34
{
35
     
36
    if (currentElement) {
37
 
38
        currentValue = string;
39
        [rootDic setObject:string forKey:currentElement];
40
    }
41
     
42
}
43
#pragma - mark 结束节点时
44
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
45    javascript特效
{
46
    if (currentElement) {
47
        [rootDic setObject:currentValue forKey:currentElement];
48
        currentElement = nil;
49
        currentValue = nil;
50
    }
51

转载于:https://www.cnblogs.com/xkzy/p/3811973.html

Objective-C学习之解析XML相关推荐

  1. XML文档定义有几种方式?它们之间有何本质区别?解析XML文档有哪几种方式?

    XML文档定义方式:有两种定义形式,dtd文档类型定义和schema模式 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的) 普通区别: 1.s ...

  2. Dom4j 解析Xml文档及XPath查询 学习笔记

    本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...

  3. Dom4j 解析Xml文档及 XPath查询 学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  4. 安卓学习笔记30:解析XML与JSON

    文章目录 零.学习目标 一.解析XML (一)XML概述 (二)解析XML的方法 二.案例演示 - 读取解析XML (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建安卓应用[ReadPars ...

  5. 安卓开发Android studio学习笔记12:读取解析XML(案例演示)

    Android studio学习笔记 第一步:配置Student.XML 第二步:配置activity_main.xml 第三步:配置student.xml 第四步:配置Student用户类 第五步: ...

  6. java stax_Java学习:使用StAX解析XML

    本文是我在学习<Java核心技术>第九版卷II(高级特性)时写的一段代码.原书作者为(美)Cay S. Horstmann,Gary Cornell,译者为陈昊鹏.王浩.姚建平等.我的Ja ...

  7. OC学习第十二节 XML解析

    ============== day12 xml解析 ============== xml是可扩展性标记语言Extensible Markup Language. 类似于HTML,是从HTML衍生出来 ...

  8. 爬虫学习4-HTML和XML数据的分析与解析

    目前在 Java 中,解析 HTML 工具主要包含以下几种: 1,jsoup:强大的 HTML 解析工具,支持以 jQuery 中 CSS Selector 的方式提取 HTML 中的元素,学习成本较 ...

  9. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

最新文章

  1. 如何利用高斯混合模型建立更好、更精确的集群?
  2. python调用pyd_Python生成pyd文件
  3. Angular中使用双向数据绑定操作表单的input、checkboc、radio、select、textarea实现简单的人员登记系统实例
  4. 收集的常用css页面及表单表格样式
  5. php mysql 获取错误_php怎样获取mysql错误信息
  6. mysql bundle.tar_MySQL 5.6 Bundle Tar安装
  7. java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...
  8. Jmeter 抓app包 抓到一半不好用了
  9. 小程序组件库开发之抽奖游戏组件
  10. LinkedList实现类
  11. 【git系列】提交新的PR-撤销git rebase
  12. SPARK学习之 --- eclipse / sbt / scala 配置
  13. python自带intertool模块找不到_Python itertools模块详解
  14. 微信抖音快手壁纸小程序三合一源码+后端功能丰富
  15. Scala之特质特质Trait
  16. 330pics-shell scripts-second
  17. Linux配置JavaWeb环境(JDK+Tmocat+Mysql+Nginx+Redis+IDEA部署)
  18. POJ1008 玛雅历
  19. firebase登录验证_使用Firebase进行电话号码身份验证
  20. 日本“经营之神”稻盛和夫去世,终年90岁,人生信条:“每天都必须特别认真地生活。”...

热门文章

  1. 借入单的后续处理-借入归还
  2. gj12-2 协程和异步io
  3. Dockerfile实战
  4. rsync 远程同步——安全高效的异地备份策略
  5. ubuntu php 支持mysql_在ubuntu16.04上安装php7 mysql5.7 nginx1.10并支持http2
  6. setwindowshookex回调函数不执行_ECMAScript 6 入门教程—Generator 函数的异步应用
  7. 2021云上架构与运维峰会12月10日线上开启,五大精彩看点不容错过
  8. Flink 在唯品会的实践
  9. SAE帮助「海底小纵队学英语」全面拥抱Serverless
  10. 架构设计:分布式服务,库表拆分模式详解