UI 13 数据解析 Parser DOM JSON
来源:互联网 发布:湖南卫视电视直播软件 编辑:程序博客网 时间:2024/05/22 15:56
Parser 解析
DOM 解析
JSON 解析
现在大部分都是使用JSON解析
stroyboard 里面只有三个button按钮, 分别代表这三种解析.
Parser解析
#import <Foundation/Foundation.h>#import "Student.h"@interface ParserXML : NSObject<NSXMLParserDelegate>// 用一条属性,数组,来装所有解析好的Model对象.@property(nonatomic, retain)NSMutableArray *stuArr;//用来临时保存节点内容的字符串.@property(nonatomic, copy)NSString *tempStr;// 给一个开始解析的方法,使用减号方法,就需要创建一个对象.使用+好方法,就省去了创建对象的步骤.- (void)startParser;@end
#import "ParserXML.h"#import "Student.h"@implementation ParserXML- (void)startParser{ // 根据文件名和类型,获取文件所在路径 NSString *parserPath = [[NSBundle mainBundle]pathForResource:@"Student" ofType:@"xml"]; // 把路径文件内容转换NSData对象保存 NSData *stuData = [NSData dataWithContentsOfFile:parserPath]; // 创建一个mxl的解析工具. NSXMLParser *parser = [[NSXMLParser alloc] initWithData:stuData]; // 需要设置解析工具的代理人. parser.delegate = self; // 开始解析 [parser parse];}#pragma mark 开始执行协议中的方法- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{// 这个方法只要一碰到节点系统就会自动走这个方法. if ([elementName isEqualToString:@"Student"]) { // 当碰到根节点时,需要对数组进行初始化. self.stuArr = [NSMutableArray array]; }else if([elementName isEqualToString:@"student"]){ // 碰到二级节点student,意味着这是一个新的对象,需要创建一个对象来接收数据,并且放入到学生数组中. Student *stu = [[Student alloc] init]; [self.stuArr addObject:stu]; [stu release]; }}- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ //找到节点里面的内容时调用,需要用一个属性来保存对应的节点内容. // 保存节点内容. self.tempStr = string;}- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ // 只要到节点结束的地方就会走这个方法. // 没有操作完的对象在数组的最后一个. Student *stu = [self.stuArr lastObject]; //赋值方法1:// if ([elementName isEqualToString:@"name"]) {// stu.name = self.tempStr;// } //赋值方法2: KVC [stu setValue:self.tempStr forKey:elementName];}
<Student> <student> <name>张三</name> <sex>男</sex> <age>22</age> <hobby>女</hobby> </student> <student> <name>李四</name> <sex>男</sex> <age>21</age> <hobby>读书</hobby> </student> <student> <name>王二麻子</name> <sex>男</sex> <age>32</age> <hobby>看美女</hobby> </student> <student> <name>刘鑫狗儿</name> <sex>男</sex> <age>23</age> <hobby>高高姐</hobby> </student></Student>
第二种 XML - DOM
#import "XML - DOM.h"@implementation XML___DOM+ (NSMutableArray *)DOMStart{ // 初始化一个用来装Model的容器. NSMutableArray *stuarr = [NSMutableArray array]; // 将文件内容读取后转化成NAData. NSString *path = [[NSBundle mainBundle]pathForResource:@"Student" ofType:@"xml"]; NSData *data = [NSData dataWithContentsOfFile:path]; // 用第三方进行数据解析. //1.要解析数据 //2.没用 //3.错误信息 //错误信息设置成nil,但是如果有问题,nil马上会被错误内容替换. GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; // 获取根节点. GDataXMLElement *rootElement = [document rootElement]; // 找到根节点,找里面所有的student节点,装在一个数组中. NSArray *arr = [rootElement elementsForName:@"student"]; //循环遍历所有符合条件的节点 for (NSInteger i = 0; i < arr.count; i++) { GDataXMLElement *stu = arr[i]; // 创建学生对象 Student *tempStu = [[Student alloc] init]; //继续寻找节点,此处只寻找到了一个name的节点. GDataXMLElement *stuElement = [[stu elementsForName:@"name"] lastObject]; NSString *nameString = [stuElement stringValue]; tempStu.name = nameString; [stuarr addObject:tempStu]; [tempStu release]; } return stuarr;}
第三种 JSON
也将其他两种方法的调用写出来啦.
- (IBAction)parser:(id)sender { ParserXML *parser = [[ParserXML alloc] init]; [parser startParser]; for (Student *stu in parser.stuArr) { NSLog(@"%@",stu.name); }}- (IBAction)DOM:(id)sender { NSMutableArray *arr = [XML___DOM DOMStart]; for (Student *stu in arr) { NSLog(@"%@",stu.name); }}// JSON 解析!- (IBAction)JSON:(id)sender { // 对本地数据进行解析 NSString *path = [[NSBundle mainBundle]pathForResource:@"movielist" ofType:@"txt"]; NSData *data = [NSData dataWithContentsOfFile:path]; //第二个参数指定一个可变的容器来接受解析之后的数据. NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];// // 打印所有电影名// NSMutableArray *arr = dic[@"result"];// for (NSMutableDictionary *DIC in arr) {// NSLog(@"%@",DIC[@"movieName"]);// } NSMutableArray *movieArr = [NSMutableArray array]; for (NSMutableDictionary *DIC in dic[@"result"]) { Movie *movie = [[Movie alloc] init]; [movie setValuesForKeysWithDictionary:DIC]; [movieArr addObject:movie]; [movie release]; }}
好吧. 前两种方法太麻烦. 现在就是用JSON解析.
0 0
- UI 13 数据解析 Parser DOM JSON
- UI数据解析(Dom,Sax,Json)
- UI---JSON数据解析
- DOM SAX JSON数据解析
- json parser 数据转化
- UI-json解析网络数据
- 使用Scala Parser解析JSON
- 数据解析_SAX DOM JSON概述
- Simplify-Core --Json解析(Json parser)
- IOS--UI--LessonParse 数据解析 XML JSON
- UI进阶:数据解析(XML解析和JSON解析)
- UI一揽子计划 15 (XML的解析方式 (SAX解析/ DOM解析) 、JSON 解析)
- 【PHP HTML DOM解析器】PHP Simple HTML DOM Parser
- dom parser
- XML DOM JSON 解析
- json parser
- PHP Simple HTML DOM Parser 強力解析html工具
- php的html解析工具 PHP Simple HTML DOM Parser
- haproxy反向代理
- django 模板标签 过滤器
- 应用防火墙原理
- RecyclerView实现瀑布流效果(图文详解+源码奉送)
- Row_Number实现分页
- UI 13 数据解析 Parser DOM JSON
- 浅谈hibernate的sessionFactory和session
- python爬虫 - python requests网络请求简洁之道
- 为算法考试做准备--队列实现Queue
- 【软件测试初体验】
- Linux 系统实时监控的瑞士军刀—Glances
- boost无锁队列queue
- 细说java.util.Timer
- 关于获得键盘高度的问题