XML数据结构 SAX 解析
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 解析相关推荐
- XML的SAX解析以及DOM解析和SAX解析区别
前言: XML解析工具 DOM解析原理:1)JAXP (oracle-Sun公司官方)2)JDOM工具(非官方)3)Dom4J工具(非官方)三大框架(默认读取xml的工具就是Dom4j)....... ...
- java sax解析_Java 解析xml 之 SAX解析
SAX是什么 SAX是一种快速读写XML数据的方式. 局限 1.SAX分析器在解析xml文档时,触发了一系列事件,因为事件本身是有时序性的.因此SAX一旦经过了某个元素,没有办法返回再去访问. 2.S ...
- android xml解析demo,Android解析自定义xml文件--Sax解析xml文件,测试demo(方案二)...
转载请注明出处:http://blog.csdn.net/droyon/article/details/9346657 Sax解析xml 以下是测试Demo 运行程序类 public class Te ...
- 解析XML文件——SAX解析技术
通常的文件等等都是以xml形式存储的,当我们要查看时就必须将他们解析出来.通常有nSimple API for XML(SAX) :nDocument Object Model(DOM)(不建议使用) ...
- 【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 ...
- JAVA-使用SAX解析XML数据
一.SAX (Simple API for XML) SAX解析XML文件采用的是事件驱动,它不需要解析完整个文档,而是一边按内容顺序解析文档,一般判断当前读到的字符是否符合XML语法中的某部分,如果 ...
- UI一揽子计划 15 (XML的解析方式 (SAX解析/ DOM解析) 、JSON 解析)
一. XML的SAX解析 1).SAX解析 1. 遵守协议 @interfaceRootViewController ()<NSXMLParserDelegate> 2. 声 ...
- SAXReader解析器--xml字符串文件解析
输入为xml格式字符串 public static void main(String[] args) throws DocumentException {String xml="<?x ...
- python输出价目表-Python:使用基于事件驱动的SAX解析XML
SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 ...
- python 使用sax 解析xml 文件
这里不是说xml 的所以如果xml 不了解,可以百度大致看下即可, SAX知识了解 SAX (simple API for XML ) 有解析器和事件处理器 解析器负责读取XML文档,并向事件处理器 ...
最新文章
- 2021河南省高考文科成绩排名查询,2021年河南高考成绩排名及一分一段表
- A16Z内部万字报告:人类与AI结合的最佳形态
- sap 后台作业状态都是什么含义
- Delphi笔记整理(二)
- linux关于mysql_Linux关于MySQL的常用操作
- 求两个字符串的最长公共子串
- 【LeetCode笔记】226. 翻转二叉树(Java、递归)
- mysql 开启慢查明_mysql开启慢查询方法
- IronRuby 发布第一个版本
- JavaSE|StringBuffer
- 2021三跨985重庆大学917计算机上岸经验分享
- springboot用jar方式调试,用war方式部署到tomcat
- 喝杯水都能泄露指纹?屏下指纹识别设备被攻破
- C语言递归(pta递归求简单交错幂级数的部分和)
- AMBA总线---APB总线协议
- VmatrixOJ--[H 1003] 小壕的礼物
- 可以用于毕设参考,请勿过度借鉴
- 快租车app——需求分析心得
- 中文词向量的下载与使用探索 (tensorflow加载词向量)
- VS Code + GCC 搭建 STM32 开发环境