SAX解析
SAX:Simple API for XML。基于事件驱动的解析⽅方式,逐⾏行解析 数据。(采⽤用协议回调机制)

NSXMLParser类
NSXMLParser是iOS⾃自带的XML解析类。采⽤用SAX⽅方式解析数据。
解析过程由NSXMLParserDelegate协议⽅方法回调
解析过程:开始标签->取值->结束标签->取值

<?xml version = "1.0" encoding = "UTF-8"?>
<students><student><name>yadong</name><sex>man</sex><phone>18310057255</phone></student><student><name>kelin</name><sex>man</sex><phone>18410057255</phone></student><student><name>marry</name><sex>woman</sex><phone>18510057255</phone></student>
</students>
#import "ViewController.h"
#import "StudentModal.h"@interface ViewController () <NSXMLParserDelegate>
{// 用来记录当前正在操作的标签NSString *_currentElement;
}@property (nonatomic, strong) NSMutableArray *xmlSAXArray;@end
- (IBAction)XMLSAXBtttonDidClicked:(UIButton *)sender {// 1、拿到 xml 文件的路径NSString *path = [[NSBundle mainBundle] pathForResource:@"myData" ofType:@"xml"];// 2、根据文件路径获取文件的内容NSData *data = [[NSData alloc] initWithContentsOfFile:path];// 3、根据 data 初始化一个 NSXMLParser 对象NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];// 4、设置 NSXMLParser 对象的相关属性// 是否处理命名空间[parser setShouldProcessNamespaces:NO];// 是否设置报告处理(前缀)[parser setShouldReportNamespacePrefixes:NO];// 5、设置代理parser.delegate = self;// 6、开始解析(调用)[parser parse];
}

实现 NSXMLParser 代理方法
开始解析(打开文档)

- (void)parserDidStartDocument:(NSXMLParser *)parser
{// 初始化数组self.xmlSAXArray = [NSMutableArray array];NSLog(@"打开文档");
}

打开标签

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{if ([elementName isEqualToString:@"student"]) {StudentModal *modal = [[StudentModal alloc] init];[self.xmlSAXArray addObject:modal];}_currentElement = elementName;NSLog(@"打开标签%@",elementName);
}

取值

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{StudentModal *modal = [self.xmlSAXArray lastObject];if ([_currentElement isEqualToString:@"name"]) {modal.name = string;} else if ([_currentElement isEqualToString:@"sex"]) {modal.sex = string;} else if ([_currentElement isEqualToString:@"phone"]) {modal.phoneNumber = string;}NSLog(@"取值%@", string);
}

关闭标签

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{_currentElement = nil;NSLog(@"关闭标签%@",elementName);
}

关闭文档

- (void)parserDidEndDocument:(NSXMLParser *)parser
{// 打印验证for (StudentModal *stu in self.xmlSAXArray) {NSLog(@"%@,%@,%@", stu.name, stu.sex, stu.phoneNumber);}NSLog(@"关闭文档");
}

XML数据结构 SAX 解析相关推荐

  1. XML的SAX解析以及DOM解析和SAX解析区别

    前言: XML解析工具 DOM解析原理:1)JAXP (oracle-Sun公司官方)2)JDOM工具(非官方)3)Dom4J工具(非官方)三大框架(默认读取xml的工具就是Dom4j)....... ...

  2. java sax解析_Java 解析xml 之 SAX解析

    SAX是什么 SAX是一种快速读写XML数据的方式. 局限 1.SAX分析器在解析xml文档时,触发了一系列事件,因为事件本身是有时序性的.因此SAX一旦经过了某个元素,没有办法返回再去访问. 2.S ...

  3. android xml解析demo,Android解析自定义xml文件--Sax解析xml文件,测试demo(方案二)...

    转载请注明出处:http://blog.csdn.net/droyon/article/details/9346657 Sax解析xml 以下是测试Demo 运行程序类 public class Te ...

  4. 解析XML文件——SAX解析技术

    通常的文件等等都是以xml形式存储的,当我们要查看时就必须将他们解析出来.通常有nSimple API for XML(SAX) :nDocument Object Model(DOM)(不建议使用) ...

  5. 【4-8】《XML与JSON》——XML、解析XML、SAX、DOM4J、XStream、JSON、Gson、Fastjson

    文章目录 XML与JSON 一.XML 1.XML概述 1.XML语法格式 2.语法进阶CDATA(了解) 2.解析XML 1.SAX解析 2.DOM解析 3.JDOM解析 4.DOM4J解析 3.D ...

  6. JAVA-使用SAX解析XML数据

    一.SAX (Simple API for XML) SAX解析XML文件采用的是事件驱动,它不需要解析完整个文档,而是一边按内容顺序解析文档,一般判断当前读到的字符是否符合XML语法中的某部分,如果 ...

  7. UI一揽子计划 15 (XML的解析方式 (SAX解析/ DOM解析) 、JSON 解析)

    一. XML的SAX解析 1).SAX解析   1. 遵守协议      @interfaceRootViewController ()<NSXMLParserDelegate> 2. 声 ...

  8. SAXReader解析器--xml字符串文件解析

    输入为xml格式字符串 public static void main(String[] args) throws DocumentException {String xml="<?x ...

  9. python输出价目表-Python:使用基于事件驱动的SAX解析XML

    SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 ...

  10. python 使用sax 解析xml 文件

    这里不是说xml 的所以如果xml 不了解,可以百度大致看下即可, SAX知识了解 SAX (simple API for XML )  有解析器和事件处理器 解析器负责读取XML文档,并向事件处理器 ...

最新文章

  1. 2021河南省高考文科成绩排名查询,2021年河南高考成绩排名及一分一段表
  2. A16Z内部万字报告:人类与AI结合的最佳形态
  3. sap 后台作业状态都是什么含义
  4. Delphi笔记整理(二)
  5. linux关于mysql_Linux关于MySQL的常用操作
  6. 求两个字符串的最长公共子串
  7. 【LeetCode笔记】226. 翻转二叉树(Java、递归)
  8. mysql 开启慢查明_mysql开启慢查询方法
  9. IronRuby 发布第一个版本
  10. JavaSE|StringBuffer
  11. 2021三跨985重庆大学917计算机上岸经验分享
  12. springboot用jar方式调试,用war方式部署到tomcat
  13. 喝杯水都能泄露指纹?屏下指纹识别设备被攻破
  14. C语言递归(pta递归求简单交错幂级数的部分和)
  15. AMBA总线---APB总线协议
  16. VmatrixOJ--[H 1003] 小壕的礼物
  17. 可以用于毕设参考,请勿过度借鉴
  18. 快租车app——需求分析心得
  19. 中文词向量的下载与使用探索 (tensorflow加载词向量)
  20. VS Code + GCC 搭建 STM32 开发环境

热门文章

  1. 微信开门,给你简单极致的开门体验!
  2. 光电自动避障小车_凌鸟智能总结了一下激光导航反射板AGV小车的优缺点!
  3. 第四章-整合管理【核心词:批准】
  4. 【机器学习】 吴恩达机器学习作业 ex1 python实现+Matlab实现
  5. div 设置a4大小_打印A4网页大小设置
  6. 计算机毕业设计Java消防安全应急培训管理平台(源码+系统+mysql数据库+Lw文档)
  7. 老板给我上了最后一课:永远要做有价值的人
  8. 黑盒测试和白盒测试详解
  9. 小a的旅行计划(BM模板)
  10. 43. Pandas查询数据的简便方法df.query