UI_XMLJSON
2024-06-16 14:50:30
Day 15
XML
Student.xml
<?xml version ="1.0" encoding="UTF-8" ?>
<students><student><name>gold one</name><age>74</age><gender>mu</gender></student><student><name>gold two</name><age>73</age><gender>gong</gender></student><student><name>gold three</name><age>67</age><gender>mu</gender></student>
</students>
SAX:
1. 容错性
2. 逐行读取,不一次性获取全部
3. 可以控制过程
4. (基于事件驱动的)
DOM:
1. 全部读取
2. 写起来方便
3. 将XML结构化成树状
sax解析
XMLViewController.m
#pragma mark - sax解析方式
- (IBAction)saxButtonAction:(UIButton *)sender
{// 1. 获取文件路径NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];// 2. 使用NSData去接受NSData *data = [NSData dataWithContentsOfFile:filePath];NSLog(@"%@", data);// 3. 创建解析对象NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:data] autorelease];// 3.1 设置代理parser.delegate = self;// 4. 开始解析[parser parse];
}
#pragma mark 开始解析文档
- (void)parserDidStartDocument:(NSXMLParser *)parser
{// 1. 创建数组self.allDataArray = [NSMutableArray array];
}#pragma mark 开始解析标签
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{// 2. 保存当前标签_currentElementStr = elementName;// 3. 判断当前标签是否属Stedentif ([elementName isEqualToString:@"student"]) {// 创建并添加Student *stu = [[Student new] autorelease];[_allDataArray addObject:stu];}
}#pragma mark 获取值
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{// 4. 获取接受值的对象Student *stu = _allDataArray.lastObject;if ([_currentElementStr isEqualToString:@"name"]) {stu.name = string;} else if([_currentElementStr isEqualToString:@"age"]) {stu.age = string;} else if ([_currentElementStr isEqualToString:@"gender"]) {stu.gender = string;}
}#pragma mark 结束解析标签
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{_currentElementStr = nil;
}#pragma mark 结束解析文档
- (void)parserDidEndDocument:(NSXMLParser *)parser
{NSLog(@"%@", _allDataArray);
}
dom解析
- (IBAction)domButtonAction:(UIButton *)sender
{// 1. 获取路径NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];// 2. 获取数据NSData *data = [NSData dataWithContentsOfFile:filePath];// 3. 创建解析对象GDataXMLDocument *document = [[[GDataXMLDocument alloc] initWithData:data options:0 error:nil] autorelease];// 4. 获取根节点GDataXMLElement *rootElement = document.rootElement;// 5. 创建大数组self.allDataArray = [NSMutableArray array];// 6. 遍历根节点下的所有子节点for (GDataXMLElement *stuElement in rootElement.children) {// 7. 有多少个student节点,就创建多少个stu对象Student *stu = [Student new];// 8. 遍历student节点下的子节点for (GDataXMLElement *subStuElement in stuElement.children) {// 9. 通过KVC的方式将name/age/gender节点中的值赋给stu对象[stu setValue:subStuElement.stringValue forKey:subStuElement.name];}// 10. 将创建好的stu添加到大数组中[_allDataArray addObject:stu];[stu release];}// 11. 打印值NSLog(@"%@", _allDataArray);}
JSON
(十分之九)
Student.json
[{"name":"jinyi","age":12,"gender":"ci"},{"name":"jinwu","age":17,"gender":"xiong"},{"name":"qinshu","age":12,"gender":"男"}
]
JSONViewController.m
- (IBAction)systemButtonAction:(UIButton *)sender
{// 1. 获取路径NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student.json" ofType:nil];// 2. 获取数据NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];// 3. 解析NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];NSLog(@"%@", arr);
}
jsonKit
#pragma mark 第三方
- (IBAction)otherButtonAction:(UIButton *)sender
{NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student.json" ofType:nil];NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];NSArray *resultDict = [data objectFromJSONData];// 4.转化成json格式NSString *jsonStr = [resultDict JSONString];NSLog(@"%@", resultDict);NSLog(@"%@", jsonStr);
}
JSON & XML 的区别
- JSON占用空间少
- XML易读,JSON不易读
- 对于解析来说,JSON的难度为0
- JSON轻量级,也是最常用的一种格式
- XML特点是标签,没有类型,全都是字符串
- JSON有:数组、对象、字符串、数字、BOOL。。。
UI_XMLJSON相关推荐
最新文章
- 前端页面如何引入公用的页面header和footer
- 巧用Eclipse Java编辑器调试
- 算法--------数组------反转字符串中的元音字母
- 【企业管理】2020年2 月 每日花语
- Objective-C基础教程学习笔记(九)内存管理
- worksteal thread pool
- qt 关闭窗口的槽函数_勇哥的VC++应用框架学习之QT(1) 信号槽、按钮控件、opencv读取显示图片...
- 对某机构为“转移内部矛盾”而嫁祸于我们的事件之真相大起底
- Lind.DDD.Manager里的3,7,15,31,63,127,255,511,1023,2047
- 极验验证码流程-3.图片加密处理 图片移位
- 第41课 蜗牛与葡萄树 《小学生C++趣味编程》
- linux下面的挂载点讲解
- 软件测试工程师-Python语言
- ParaSwap启动Aave V2集成,允许用户在V1和V2版之间进行套利
- 浏览器启动__chrome浏览器
- struts2与spring整合问题,访问struts2链接时,spring会负责创建Action
- ubuntu常用命令(未整理)
- 常见端口入侵方法剖析
- 5款不错的整站下载工具
- 语文七年级计算机作文,七年级上册语文期末考试作文(精选11篇)
热门文章
- 电视共享计算机用户名和密码是什么情况,智能电视经SMB连接电脑登录时报用户名或密码错误...
- 经典 【操作系统实验】 实验六 设备驱动程序 RH5 2.6.18 + 2.6.32 内核
- linux-12月第四周-磁盘存储和文件系统
- VR技术在数据中心3D机房中的应用(上)
- 实现多线程、进程、线程、设置和获取线程名称、线程调度、线程控制、线程生命周期、同步代码块、线程安全的类、Lock锁、生产者消费者模式
- 娱乐与办公 我与华为平板 M3 青春版的日常
- java apidoc案例_JAVA APIDOC 文档使用教程
- python 学习第六天
- esp8266局域网连接控制电机运动
- light动名词_动名词专项训练