UI数据解析(Dom,Sax,Json)
来源:互联网 发布:烯牛数据 编辑:程序博客网 时间:2024/05/24 04:06
ViewController.h文件#import <UIKit/UIKit.h>#import "Students.h"#import "GDataXMLNode.h"@interface ViewController : UIViewController<NSXMLParserDelegate>//学生数组@property(nonatomic,strong)NSMutableArray *stuArray;//临时变量,记录标签中的值@property(nonatomic,strong)NSString *tempStr;@endViewController.m文件#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; /* //解析的基本概念 //XML数据结构 //JSON数据结构 1.进行XML数据结构解析时使用到SAX工具,DOM工具 2.进行JSON数据结构解析时使用到第三方框架以及系统方法 //解析的基本概念 所谓'解析':从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据,数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析、json解析 XML数据结构 xml:Extensibale Markup Language(可扩展标记语言) 主流数据格式之一,可以用来存储和传输数据 SAX:Simple APi for XML. 基于事件驱动的解析方式,逐行解析数据(采用协议回调机制) DOM:Document Object Model(文档对象模型). Dom方式解析XML时,读入整个xml文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意XML节点,读取它的属性和值.而且通常情况下,可以借助Xpath,直接查询XML节点. */}#pragma -mark sax解析- (IBAction)SAXButton:(id)sender { //1.获取文件路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"]; //2.转成数据 NSData *data = [NSData dataWithContentsOfFile:path]; //3.创建解析类 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; //4.授权 parser.delegate = self; //5.开始解析 [parser parse];}#pragma -mark sax解析的代理方法//发现标签开始处理函数(即报告元素的开始以及元素的属性)-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{ //当发现student节点的时候初始化数组准备装学生 if ([elementName isEqualToString:@"students"]) { _stuArray = [NSMutableArray array]; } //当发现学生的时候,创建一个学生对象并加入数组 else if ([elementName isEqualToString:@"student"]) { Students *stu = [[Students alloc] init]; [_stuArray addObject:stu]; }}//记录临时变量:处理标签包含内容字符(报告标签的所有或者部分内容)-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ //临时变量记录节点内容 self.tempStr = string;}//发现标签结束符的处理函数,保存标签各项数据(即报告标签的结束标记)-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ //从数组中取出学生 赋值 Students *stu = [_stuArray lastObject]; //赋值// if ([elementName isEqualToString:@"name"]) {// stu.name = _tempStr;// }else if ([elementName isEqualToString:@"sex"])// {// stu.sex = _tempStr;// }else if ([elementName isEqualToString:@"number"])// {// stu.number = _tempStr;// }else// {// stu.phone = _tempStr;// }// //kvc赋值 //可以用kvc赋值(要在students对象中添加一个方法) //-(void)setValue:(id)value forUndefinedKey:(NSString *)key [stu setValue:_tempStr forKey:elementName];}//解析完成(报告解析的结束)-(void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"解析完成"); for (Students *stu in _stuArray) { NSLog(@"%@",stu.name); }}#pragma -mark Dom解析- (IBAction)DomButton:(id)sender { //Dom解析需要以下几个步骤: //1.header search path 中添加${SDKROOT}/usr/include/libxml2 //2.添加libxml2依赖库 //3.mrc转arc 在Build Phases 的compile Sources 中添加进来的文件后面加上 -fno-objc-arc //1.获取文件路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"]; //2.转NSData NSData *data = [NSData dataWithContentsOfFile:path]; //3.数组初始化 _stuArray = [NSMutableArray array]; //装载数据(把完成的data丢到内存) GDataXMLDocument *docuemnt = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; //获取根节点 GDataXMLElement *rootElement = [docuemnt rootElement]; //获取子节点 NSArray *array = [rootElement elementsForName:@"student"]; //遍历数组获取数据 for (GDataXMLElement *element in array) { Students *stu = [[Students alloc] init]; //赋值(需要强转) stu.number = [[[element elementsForName:@"number"] lastObject] stringValue]; stu.sex = [[[element elementsForName:@"sex"] lastObject] stringValue]; stu.phone = [[[element elementsForName:@"phone"] lastObject] stringValue]; stu.name = [[[element elementsForName:@"name"] lastObject] stringValue]; [_stuArray addObject:stu]; } for (Students *stu in _stuArray) { NSLog(@"%@",stu.name); }}#pragma -mark JSON解析- (IBAction)JsonButton:(id)sender { //获取要解析的文件路径 //将文件转化成数据类型(NSData) //解析 NSString *path = [[NSBundle mainBundle] pathForResource:@"Student1" ofType:@"txt"]; NSData *data = [NSData dataWithContentsOfFile:path]; //解析 NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%ld",[array count]); //初始化学生数组 NSMutableArray *array1 = [NSMutableArray array]; //遍历数组取出学生 for (NSMutableDictionary *dic in array) { Students *stu = [[Students alloc] init]; [stu setValuesForKeysWithDictionary:dic]; [array1 addObject:stu]; } for (Students *stu in array1) { NSLog(@"%@",stu.name); }}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
1 0
- UI数据解析(Dom,Sax,Json)
- DOM SAX JSON数据解析
- UI 13 数据解析 Parser DOM JSON
- UI一揽子计划 15 (XML的解析方式 (SAX解析/ DOM解析) 、JSON 解析)
- XML解析、DOM解析、SAX解析、Json解析
- 16 JSON解析、XML解析(DOM解析,SAX解析)
- XML数据的三种解析(JSON方式 , DOM方式 , Sax方式)
- XML数据解析-SAX和DOM
- UI---JSON数据解析
- SAX解析,DOM解析以及XML HTML JSON之间区别
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- android中json、sax、dom解析xml对比
- DOM和SAX解析
- dom,sax解析xml
- Sax,Pull,Dom解析
- Cannot start the task because the resource provision thresholds have been reached. This task will wa
- Service详解(四):绑定服务 与 通信
- stm32的定时器
- Databricks孟祥瑞:ALS 在 Spark MLlib 中的实现
- java list 排序
- UI数据解析(Dom,Sax,Json)
- 三、Instrument之Allocations工具(内存分配)
- p367最小生成树kruskal
- 远程连接Mysql服务器
- android短信监听
- cocos2dx编译出错_最简单解决方法
- Ubuntu不同目录下profile与bashrc的区别
- 自适应权值立体匹配-Adaptive support-weight Approach for Correspondence search
- MySql远程不能登录问题解决办法