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 的区别

  1. JSON占用空间少
  2. XML易读,JSON不易读
  3. 对于解析来说,JSON的难度为0
  4. JSON轻量级,也是最常用的一种格式
  5. XML特点是标签,没有类型,全都是字符串
  6. JSON有:数组、对象、字符串、数字、BOOL。。。

UI_XMLJSON相关推荐

最新文章

  1. 前端页面如何引入公用的页面header和footer
  2. 巧用Eclipse Java编辑器调试
  3. 算法--------数组------反转字符串中的元音字母
  4. 【企业管理】2020年2 月 每日花语
  5. Objective-C基础教程学习笔记(九)内存管理
  6. worksteal thread pool
  7. qt 关闭窗口的槽函数_勇哥的VC++应用框架学习之QT(1) 信号槽、按钮控件、opencv读取显示图片...
  8. 对某机构为“转移内部矛盾”而嫁祸于我们的事件之真相大起底
  9. Lind.DDD.Manager里的3,7,15,31,63,127,255,511,1023,2047
  10. 极验验证码流程-3.图片加密处理 图片移位
  11. 第41课 蜗牛与葡萄树 《小学生C++趣味编程》
  12. linux下面的挂载点讲解
  13. 软件测试工程师-Python语言
  14. ParaSwap启动Aave V2集成,允许用户在V1和V2版之间进行套利
  15. 浏览器启动__chrome浏览器
  16. struts2与spring整合问题,访问struts2链接时,spring会负责创建Action
  17. ubuntu常用命令(未整理)
  18. 常见端口入侵方法剖析
  19. 5款不错的整站下载工具
  20. 语文七年级计算机作文,七年级上册语文期末考试作文(精选11篇)

热门文章

  1. 电视共享计算机用户名和密码是什么情况,智能电视经SMB连接电脑登录时报用户名或密码错误...
  2. 经典 【操作系统实验】 实验六 设备驱动程序 RH5 2.6.18 + 2.6.32 内核
  3. linux-12月第四周-磁盘存储和文件系统
  4. VR技术在数据中心3D机房中的应用(上)
  5. 实现多线程、进程、线程、设置和获取线程名称、线程调度、线程控制、线程生命周期、同步代码块、线程安全的类、Lock锁、生产者消费者模式
  6. 娱乐与办公 我与华为平板 M3 青春版的日常
  7. java apidoc案例_JAVA APIDOC 文档使用教程
  8. python 学习第六天
  9. esp8266局域网连接控制电机运动
  10. light动名词_动名词专项训练