//解析:将特定数据格式(如: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 数据解析的更多相关文章

  1. Android之JSON格式数据解析

    查看原文:http://blog.csdn.net/hantangsongming/article/details/42234293 JSON:JavaScript 对象表示法(JavaScript ...

  2. HttpClient 模拟发送Post和Get请求 并用fastjson对返回json字符串数据解析,和HttpClient一些参数方法的deprecated(弃用)的综合总结

    最近在做一个接口调用的时候用到Apache的httpclient时候,发现引入最新版本4.5,DefaultHttpClient等老版本常用的类已经过时了,不推荐使用了:去官网看了一下在4.3之后就抛 ...

  3. html中通过js获取接口JSON格式数据解析以及跨域问题

    前言:本人自学前端开发,一直想研究下js获取接口数据在html的实现,顺利地找到了获取数据的方法,但是有部分接口在调用中出现无法展示数据.经查,发现时跨域的问题,花费了一通时间,随笔记录下过程,以方便 ...

  4. DOM数据解析

    //DOM : Document Object Model ,一种XML解析的方式,先读取整篇的内容,然后再进行解析,解析速度比较快,如果内出现错误,解析就会失败,iOS不支持DOM解析,goole提 ...

  5. Json.Net 数据解析

    参考资料: 随笔分类 - Json.Net系列

  6. Android学习笔记_7_使用 sax 或者 dom 或者 pull 解析XML文件

    一.Pull解析介绍: Android上使用SAX和DOM方式解析XML的方法,并且对两种做了简单的比较,通过比较我们知道对在往往内存比较稀缺的移动设备上运行的Android系统来说,SAX是一种比较 ...

  7. Java数据解析---JSON

    一.Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1.键值对类型 { ...

  8. 浅议iOS网络数据解析

    /*------------------------------------ 数据解析: 1.JSON数据 --------------------------------*/ 重点:1.什么是JSO ...

  9. 通过Jquery中Ajax获取json文件数据

    1. JSON(JavaScript Object Notation): javaScript对象表示法: 是存储和交换文本信息的语法,比xml更小,更快,更易解析. 2. JSON基本书写格式 : ...

随机推荐

  1. 常见jsp跳转总结

    这次做项目,用到几种不同的JSP跳转的方式,在此总结5中常用方法. 常用的跳转方式有以下几种: (1)href超链接标记,属于客户端跳转 (2)使用javascript完成,属于客户端跳转 (3)提交 ...

  2. tflearn 实现DNN 全连接

    https://github.com/tflearn/tflearn/blob/master/examples/others/recommender_wide_and_deep.py import n ...

  3. ReactNative手势解锁(react-native-ok-gesture-password)

    在大前端的趋势之下,我也慢慢开始从事React Native相关的开发.但是奈何React Native生态相对于Android来说还是太小了.许多开源的库早早就已经不再维护.之前项目中需要用到手势解 ...

  4. html中的innerHTML

    首先看个例子 <html> <head> <script type="text/javascript"> function getInnerHT ...

  5. 关于number...的精度问题

    一 当数字的精度被定为number(3,2)时, 这时他能输入的数字整数部分只能是3-2=1位, 小数位如果不够会用0补齐, 超出的四舍五入保留3位小数. SQL> insert into t_ ...

  6. VMware虚拟机安装Centos预安装环境图文教程1

    前言: 习惯了微软的各种可视化开发软件环境,突然接触Linux命令式的操作环境,总是会让人有些反感跟抵触的. 经过了几天的研究,发现Linux也并不是那么的深不可测.在配置网站部署环境的时候,系统集成 ...

  7. [leetcode]318. Maximum Product of Word Lengths单词长度最大乘积

    Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...

  8. CentOS 7安装zabbix步骤

    Zabbix配置安装 1.前期准备: 我自己的基础环境:CentOS 7 + Mysql 5.6 可以根据官网介绍一步一步安装,官网地址:https://www.zabbix.com/ 图1: 然后点 ...

  9. mysql rc模式时binlog_format=row的解释【转】

    总体来说:在 tx_isolation= READ-COMMITTED .binlog_format =statement 的情况下,mysql 没有gap 锁,这样binlog 记录的数据修改的顺序 ...

  10. PAT 1020 月饼 (25)(精简版代码+思路+推荐测试用例)

    1020 月饼 (25)(25 分)提问 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是 ...