SAX, JSON , DOM 数据解析
//解析:将特定数据格式(如:xml,json)中提取出来所需的内容
//SAX: Simply API for XML, xml解析的一种方式,逐行解析,读一行内容,取一行内容,速度慢,占用内存小,如果内容格式不对,不影响之前内容的读取
//iOS采取SAX解析方法
一 SAX
<!-- XML:Extensible Markup Language,可扩展标记语言,用于存储数据,以树的形式存储,每一个节点都有开始标签和结束标签,内容存放于开始标签和结束标签中间 -->
<students name = "123"]]>
<student positon = "班长"]]>
<name>小明</name>
<sex>男</sex>
<age>20</age>
</student>
<student>
<name>小强</name>
<sex>男</sex>
<age>18</age>
</student>
<student>
<name>小红</name>
<sex>女</sex>
<age>16</age>
</student>
</students>
@property (nonatomic, retain) NSMutableArray *studentArray;
@property (nonatomic, retain) Student *student;
//存放节点信息
@property (nonatomic, retain) NSString *tempString;
- (void)viewDidLoad {
[super viewDidLoad];
// NSXMLParser, 用于解析xml 的类,使用SAX解析方式
//NSXMLParser使用步骤
//1.读取数据
//获取文件路径
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
//1
//创建URL
NSURL *url = [[NSURL alloc] initFileURLWithPath:filePath];
//创建NSXMLParser
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[url release];
//2
//创建NSData
// NSData *data = [NSData dataWithContentsOfFile:filePath];
//
// //创建NSXMLParser
// NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];
//2.开始解析(整个的解析过程在delegate中)
//设置代理
xmlParser.delegate = self;
//开始解析
BOOL resutle = [xmlParser parse];
NSLog(@"%d", resutle);
//解析前思考,将数据以什么形式存储(数组或字典)
//对于一些固定的数据结构,一般封装成数据模型(如:Student)
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - NSXMLParserDelegate
//开始解析
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
NSLog(@"star");
self.studentArray = [NSMutableArray arrayWithCapacity:3];
}
//解析出现错误
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
NSLog(@"error:%@", parseError);
} //遇到开始标签
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
//elementName:标签名字
//attributeDic:标签属性
//namespaceURI:命名空间(了解)
NSLog(@"StarElentment:%@", elementName);
if ([elementName isEqualToString:@"student"]) {
self.student = [[Student alloc] init];
}
} //开始和结束标签之间的内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
self.tempString = string;
}
//遇到结束标签
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"student"]) {
[_studentArray addObject:_student];
[_student release];
} else if ([elementName isEqualToString:@"name"]) {
self.student.name = _tempString;
} else if ([elementName isEqualToString:@"sex"]) {
self.student.sex = _tempString;
} else if ([elementName isEqualToString:@"age"]) {
self.student.age = _tempString;
}
}
//结束解析
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"end");
NSLog(@"%@", _studentArray);
}
SAX, JSON , DOM 数据解析的更多相关文章
- Android之JSON格式数据解析
查看原文:http://blog.csdn.net/hantangsongming/article/details/42234293 JSON:JavaScript 对象表示法(JavaScript ...
- HttpClient 模拟发送Post和Get请求 并用fastjson对返回json字符串数据解析,和HttpClient一些参数方法的deprecated(弃用)的综合总结
最近在做一个接口调用的时候用到Apache的httpclient时候,发现引入最新版本4.5,DefaultHttpClient等老版本常用的类已经过时了,不推荐使用了:去官网看了一下在4.3之后就抛 ...
- html中通过js获取接口JSON格式数据解析以及跨域问题
前言:本人自学前端开发,一直想研究下js获取接口数据在html的实现,顺利地找到了获取数据的方法,但是有部分接口在调用中出现无法展示数据.经查,发现时跨域的问题,花费了一通时间,随笔记录下过程,以方便 ...
- DOM数据解析
//DOM : Document Object Model ,一种XML解析的方式,先读取整篇的内容,然后再进行解析,解析速度比较快,如果内出现错误,解析就会失败,iOS不支持DOM解析,goole提 ...
- Json.Net 数据解析
参考资料: 随笔分类 - Json.Net系列
- Android学习笔记_7_使用 sax 或者 dom 或者 pull 解析XML文件
一.Pull解析介绍: Android上使用SAX和DOM方式解析XML的方法,并且对两种做了简单的比较,通过比较我们知道对在往往内存比较稀缺的移动设备上运行的Android系统来说,SAX是一种比较 ...
- Java数据解析---JSON
一.Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1.键值对类型 { ...
- 浅议iOS网络数据解析
/*------------------------------------ 数据解析: 1.JSON数据 --------------------------------*/ 重点:1.什么是JSO ...
- 通过Jquery中Ajax获取json文件数据
1. JSON(JavaScript Object Notation): javaScript对象表示法: 是存储和交换文本信息的语法,比xml更小,更快,更易解析. 2. JSON基本书写格式 : ...
随机推荐
- Java并发知识(1)
1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和 ...
- 分享 - 27 个机器学习、数学、Python 速查表
转载自:伯乐在线 - iPytLab,原文链接,侵删 机器学习涉及到的方面非常多.当我开始准备复习这些内容的时候,我找到了许多不同的”速查表”, 这些速查表针对某一主题都罗列出了所有我需要知道的知 ...
- tflearn 实现DNN 全连接
https://github.com/tflearn/tflearn/blob/master/examples/others/recommender_wide_and_deep.py import n ...
- IsPostBack用法
可以自己定义 在页面中定义隐藏的input,设置为ispostback. <form action="" method=""> <input ...
- 日志记录发布网站之后不成功,对路径“C:\Inetpub\wwwroot\***\***.xls”的访问被拒绝。
主要是web程序的根目录文件夹路径访问权限不够,新增加一个everyone的完全控制读写的权限即可!---------折磨了两天,才发现使劲使错了地方. 另外: 一定谨记!!!!! 所写的路径如果不存 ...
- React Native 首次加载白屏优化
RN首次加载都会有个白屏过程,一般都会有500ms+的白屏时间,原生页面开发同样的页面会能够快速显示而在RN页面中有个明显的等待过程,这个会影响用户体验. 1.使用过渡页面 简单处理可以在白屏过程中加 ...
- E0443类模板 "std::unordered_set" 的参数太多
1>------ 已启动全部重新生成: 项目: QtGuiApplication20190416, 配置: Debug x64 ------1>Uic'ing QtGuiApplicati ...
- MongoDB安装(一)
详细图解,记录 win7 64 安装mongo数据库的过程.安装的版本是 MongoDB-win32-x86_64-2008plus-ssl-3.4.1-signed. 示例版本:mongodb-wi ...
- Spring框架的AOP的底层实现
1. Srping框架的AOP技术底层也是采用的代理技术,代理的方式提供了两种 1. 基于JDK的动态代理 * 必须是面向接口的,只有实现了具体接口的类才能生成代理对象 2. 基于CGLIB动态代理 ...
- Html使用Iframe无刷新上传文件,后台接收
html代码:我是发送请求到teacher_center.aspx,不是到.ashx一般处理程序里,需要加 runat="server",有空我再试试发送请求到 .ashx 里 & ...