UI一揽子计划 15 (XML的解析方式 (SAX解析/ DOM解析) 、JSON 解析)
NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
// NSData
NSData *data = [NSData dataWithContentsOfFile:path];
// 创建一个分析人 类
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
// 设置代理
parser.delegate = self;
// 解析数据(开始分析) 利用代理协议方法 进行数据分析
[parser parse];
// 我在这里释放 行不行???
NSLog(@"我在这里释放 行!");
// 内存管理
[parser release];
{
NSLog(@"开始分析文件");
// 初始化数组
self.dataArray = [NSMutableArray array];
}
// 找节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
// NSLog(@"开始遇到节点");
NSLog(@"<%@>", elementName);
// 初始化model
if ([elementName isEqualToString:@"Student"]) {
self.model = [[StudentModel alloc]init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
// NSLog(@"发现字符触发");
NSLog(@"%@", string);
self.str = string;
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// NSLog(@"遇到节点结束触发");
NSLog(@"</%@>", elementName);
if ([elementName isEqualToString:@"name"]) {
self.model.name = self.str;
} else if ([elementName isEqualToString:@"gender"]) {
self.model.gender = self.str;
} else if ([elementName isEqualToString:@"age"]) {
self.model.age = self.str;
} else if ([elementName isEqualToString:@"motto"]) {
self.model.motto = self.str;
} else if ([elementName isEqualToString:@"Student"]) {
// 节点名等于Student的时候 一个model就赋值完成了 这时候 装进数组里
[self.dataArray addObject:self.model];
[_model release];
}
{
NSLog(@"已经结束分析文件");
// NSData
NSData *data = [NSData dataWithContentsOfFile:path];
// 利用XMLNode类 进行DOM 解析
NSError *error = nil;
GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:data options:0 error:&error];
// 获取根节点
GDataXMLElement *rootElement = [document rootElement];
// 从根节点开始打印 把所有的东西都打印出来了
NSLog(@"%@", rootElement);
// 获取根节点下Student节点
NSArray *Studentrray = [rootElement elementsForName:@"Student"];
NSLog(@"%@", Studentrray);
// 遍历Student节点的数组
self.dataArray = [NSMutableArray array];
for (int i = 0; i < Studentrray.count; i++) {
// 取出每一个学生节点
GDataXMLElement *oneStudentElement = Studentrray[i];
// 取出oneStudentElement 节点下的name 数组
NSArray *nameArray = [oneStudentElement elementsForName:@"name"];
// 取出name 节点
GDataXMLElement *nameElement = nameArray [0];
// 转化为字符串
NSString *name = [nameElement stringValue];
NSLog(@"%@", name);
NSString *gender = [self backStringWithElement:oneStudentElement Forname:@"gender"];
NSLog(@"%@", gender);
NSString *age = [self backStringWithElement:oneStudentElement Forname:@"age"];
NSLog(@"%@", age);
NSString *motto = [self backStringWithElement:oneStudentElement Forname:@"motto"];
NSLog(@"%@", motto);
// 给Model 赋值初始化一个model
StudentModel *model = [[StudentModel alloc]init];
model.name = name;
model.gender = gender;
model.age = age;
model.motto = motto;
[self.dataArray addObject:model];
[model release];
}
NSLog(@"%@", self.dataArray);
}
// 将取出名字的方法封装起来
- (NSString *)backStringWithElement:(GDataXMLElement *)element Forname:(NSString *)name
{
NSArray *array = [element elementsForName:name];
GDataXMLElement *element1 = array [0];
return [element1 stringValue];
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"Teacher" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
// 把data 转化成可变数组或者可变字典 是字典还是数组 要看json 最外层是什么.
// 使用 jsonKit 来解析数据
//NSMutableArray *jsonArray =[data objectFromJSONData];
// NSJSONSerialization json解析使用的类
NSMutableArray *dataArray = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
// 剥香蕉
self.dataArray = [NSMutableArray array];
for (NSDictionary *dic in dataArray) {
TeacherModel *model = [[TeacherModel alloc]init];
[model setValuesForKeysWithDictionary:dic];
[self.dataArray addObject:model];
[model release];
}
NSLog(@"%@", self.dataArray);
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"area" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
self.dataArray = [NSMutableArray array];
for (NSDictionary *dic in jsonArray) {
CityModel *model = [[CityModel alloc]init];
[model setValuesForKeysWithDictionary:dic];
[self.dataArray addObject:model];
NSLog(@"%@", model.province);
[model release];
}
NSLog(@"%@", self.dataArray);
UI一揽子计划 15 (XML的解析方式 (SAX解析/ DOM解析) 、JSON 解析)相关推荐
- UI一揽子计划 16 (网络编程、HTTP协议、iOS 实现网络编程、服务器接口)
一.GET 请求方法 1.get同步请求 // Get同步请求 - (void)actionLeftButton:(UIBarButtonItem *)leftButton { // 创建网址 ...
- Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)
Java的xml解析器库有很多,总的来说,万变不离其宗的就是SAX和DOM解析器. SAX的包是org.xml.sax DOM的包是org.w3c.dom 1) DOM DOM 是用与平台和语言无关的 ...
- python自动解析json_JsonParser–使用python编写的json解析器
最近在练习python,于是尝试使用python编写json解析器,目前已经大体实现,通过了jsonTestFile.txt中的测试例子.代码github网址为:https://github.com/ ...
- gson解析天气json_几种常用JSON解析库性能比较
PS:公众号推文时间工作日早晨8点50分,周末下午3点30分,不见不散哈! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Jav ...
- UI一揽子计划 19 (数据库管理系统、SQL语句、iOS 的数据库实现技术)
一.数据库管理系统 1. 以一定的方式存储在一起; 2. 能为多个用户共享 3. 具有尽可能小的冗余度 4. 与程序彼此独立的数据集合 二.SQL语句 SQlite常用语句 注:SQlite语句 不区 ...
- UI一揽子计划 9 (UITableView 、UITableView 、重用机制)
一. UITableView UITableView继承自UIScrollView,所以可以滚动 表视图的每⼀一条数据都是显示在UITableViewCell对象中 表视图可以分区显⽰示数据,每个分区 ...
- UI一揽子计划 1 (UIView UILabel)
第一天 1.UIView ·建立一个空模板后,首先将ARC模式关闭,因为iOS采用MRC模式,即手动管理内存. ·重写dealloc方法. - (void)dealloc { [_window rel ...
- UI一揽子计划 2 (UITextField UIButton)
UItextField 一.创建一个UITextField时候默认就弹出键盘 1 对齐方式 textField.textAlignment = NSTextAlignmentCente ...
- UI一揽子计划 24 (MVC、通知、)
一.MVC Model - View - Controller 即 模型 - 视图 - 控制器 Modle (模型) 存储 处理数据 为应用程序提供数据. View (视图)展示用户界面视图,提供 ...
最新文章
- App设计灵感之十二组精美的机票预订App设计案例
- b g opencv读入的图片 r_OpenCV提取显示一张图片(或者视频)的R,G,B颜色分量
- 最优化学习笔记(四)——最速下降法
- springbatch开启任务的两种方式
- 使用Python和Perl绘制北京跑步地图
- Ubuntu 16.04重启Nautilus
- 【全网世界区划最全整理输出之第三部分】全世界所有国家的行政区划整理,省市信息,已按照国家,省,市排好序,可直接复制使用,第三部分到12722行,总条数:21088
- PlatformIO中arduino框架下stm32编程实现原理
- 推荐几款网盘资源搜索站点,必须收藏 !
- 软件与证书之间的关系
- 技术方案评审文档模版
- slice与split的区别
- wow达拉然发礼物机器人_达拉然彩蛋:会把玩家变羊的NPC,并赠送礼物
- 进阶版--Mongodb命令汇总
- java.sql.SQLException: No suitable driver found for jdbc
- OPENGL-学习计算机图形学
- oracle ebs 安装教程,Oracle EBS R12.1.1 安装及配置
- 台式计算机激光头,cd机激光头维修论坛-CD机维修,我家台式CD机坏了,进仓后激光头只动动,但是不发红光,懂的朋友来指点。-电气资讯 - 电工屋...
- 二分法求解平方根注意点:
- Edge浏览器打开新建标签页速度很慢?如何解决?