UI基础-XML、JSON 数据结构解析
来源:互联网 发布:ps切片淘宝上传有缝隙 编辑:程序博客网 时间:2024/06/05 23:58
解析的基本概念
所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式、数据提供方按照格式提供数据、
数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析、JSON解析
XML数据结构
XML基本概念
XML:Extensible Markup language(可扩展标记语言),主流数 据格式之一,可以用来存储和传输数据。
XML数据格式的功能
数据交换
内容管理
用作配置文件
XML数据结构的语法
声明
节点使用一对标签表示。起始和结束标签。
根节点是起始节点,只有一个。节点可以嵌套。
节点可以有值。存储在一对儿标签中。
进行XML解析式使用到的SAX工具
SAX解析
SAX:Simple API for XML。
基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)
NSXMLParser类
NSXMLParser是iOS自带的XML解析类。采用SAX方式解析数据。
解析过程由NSXMLParserDelegate协议方法回调
解析过程:开始标签->取值->结束标签->取值
例题:
新建工程,Appdelegate中
RootViewController *rootVC = [[RootViewController alloc] init]; UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:rootVC]; self.window.rootViewController = navC; [navC release]; [rootVC release];
根视图控制器中,解析XML数据
- (void)xmlParserUpData{ // 利用的是系统的 NSXMLParser // xml 分析人 类 // 以驱动事件循环进行xml的解析(利用触发的代理方法解析) // 真谛:逐行解析 // 获取路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"]; // 创建要分析的data(二进制对象) NSData *data = [NSData dataWithContentsOfFile:path]; // 创建分析人 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; // 驱动事件(设置代理) parser.delegate = self; // 开始分析 [parser parse]; // 释放 [parser release];}
创建StudentModel
// StudentModel.h中,声明属性与xml文件中一致@property (nonatomic, retain) NSString *name;@property (nonatomic, retain) NSString *gender;@property (nonatomic, retain) NSString *age;@property (nonatomic, retain) NSString *motto;
// StudentModel.m中- (void)dealloc{ [_name release]; [_gender release]; [_age release]; [_motto release]; [super dealloc];}- (void)setValue:(id)value forUndefinedKey:(NSString *)key{}
实现代理方法
- (void)parserDidStartDocument:(NSXMLParser *)parse{ NSLog(@"已经开始分析文件....."); self.dataArr = [NSMutableArray array];}- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ NSLog(@"<%@>", elementName); // 遇到Student节点初始化model if ([elementName isEqualToString:@"Student"]) { self.model = [[StudentModel alloc] init]; } //NSLog(@"已经遇到开始节点.....");}- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ NSLog(@"%@", string); // 保存字符串 self.string = string; //NSLog(@"发现字符.....");}- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ NSLog(@"</%@>", elementName); // 对model进行赋值 if ([elementName isEqualToString:@"name"]) { self.model.name = self.string; } else if ([elementName isEqualToString:@"gender"]){ self.model.gender = self.string; } else if ([elementName isEqualToString:@"age"]){ self.model.age = self.string; } else if ([elementName isEqualToString:@"motto"]){ self.model.motto = self.string; } else if ([elementName isEqualToString:@"Student"]){ // 装进数组里 [self.dataArr addObject:self.model]; [self.model release]; } //NSLog(@"已经遇到结束节点.....");}- (void)parserDidEndDocument:(NSXMLParser *)parser{ // 这时装完所有的model NSLog(@"%@", self.dataArr); NSLog(@"已经结束分析文件.....");}
进行XML解析式使用到的DOM工具
DOM解析
DOM:Document Object Model(文档对象模型)。
解析时需要
将XML文件整体读入,并且将XML结构化成树状,使用时再通过树状结构读取相关数据
GDataXMLNode
GDataXMLNode是Google提供的开源XML解析类,对
libxml2.dylib进行了Objective-C的封装。
采用DOM方式解析数据。
iOS中包含一个C语⾔言的动态链接库libxml2.dylib,解析速度比 NSXMLParser快。
例题:
导入libxml2框架
新建工程,在Appdelegate中(同上)
在根视图控制器中,进行DOM解析
// Dom解析 依靠第三方类库GDataXMLNode// GDataXMLNode类 依靠系统的libxml2 来实现// 使用的时候 需要导入libxml2 框架// 真谛:把所有的节点一次性读取 并转化为 树形结构 整体解析(与SAX解析的区别)- (void)GDataXMLNodeUpData{ // 获取路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"]; // 转化成二进制对象 NSData *data = [NSData dataWithContentsOfFile:path]; // 创建一个错误对象 NSError *error = nil; // 初始化文件对象 GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:&error]; // 获取根节点 GDataXMLElement *rootElement = [document rootElement]; // NSLog(@"%@", [rootElement stringValue]); // 获取根节点下 student节点 NSArray *elementArr = [rootElement elementsForName:@"Student"]; // NSLog(@"%@", elementArr); // 初始化数组保存model self.dataArr = [NSMutableArray array]; // 遍历数组 对每一个Student节点 继续化整为零 for (GDataXMLElement *element in elementArr) { StudentModel *model = [[StudentModel alloc] init]; model.name = [self getElementFromArr:element elementName:@"name"]; model.gender = [self getElementFromArr:element elementName:@"gender"]; model.age = [self getElementFromArr:element elementName:@"age"]; model.motto = [self getElementFromArr:element elementName:@"motto"]; // 装进数组 [self.dataArr addObject:model]; [model release]; }}// 1. 找报红得对象(是方法里面没有的 需要外界传进来)// 2. 找可变的对象 (例如name等 这个 也是需要传进来的)// 3. 选好返回值- (NSString *)getElementFromArr:(GDataXMLElement *)element elementName:(NSString *)elementName{ // 取出name节点 NSArray *nameElementArr = [element elementsForName:elementName]; // 从数组中取出name节点 GDataXMLElement *nameElement = nameElementArr[0]; // 把节点中的值 取出来 NSString *name = [nameElement stringValue]; return name;}
JSON数据结构
JSON数据结构的概念
Javascript Object Notation,轻量级的数据交换格式,采用完全独⽴立于语言的文本格式,被称为理想的数据交换语言。
JSON数据结构的语法
JSON文档有两种结构:对象、数据。
对象:以“{”开始,以“}”结束,是“名称/值”对儿的集合。名称和值中 间⽤用“:”隔开。多个“名称/值”对之间用“,”隔开。类似OC中的字典。
数组:以“[”开始,以“]”结束,中间是数据。数据以“,”分隔。 JSON中的数据类型:字符串、数值、BOOL、对象、数组。
JSON数据结构的功能
数据交换
内容管理
配置⽂文件
使用Foundation进行JSON解析
NSJSONSerialization
// 解析Jason数据// 真谛:必须要知道 json文件的最外层是什么// [ ]是数组 { }是字典- (void)setUpJasonData{ NSString *path = [[NSBundle mainBundle] pathForResource:@"Teacher" ofType:@"json"]; NSData *data = [NSData dataWithContentsOfFile:path]; NSError *error = nil; // 把jsonde二进制文件 转化成 数组 或者 字典 NSMutableArray *dataArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];}
使用JSONKit进行JSON解析
JSONDecoder对象的作用
NSString(JSONKitDeserializing)类目的作用 NSData(JSONKitDeserializing)类目的作用 NSString(JSONKitSerializing)类目的作用 NSArray(JSONKitSerializing)类目的作用 NSDictionary(JSONKitSerializing)类目的作用
- (void)setUpJasonData{ NSString *path = [[NSBundle mainBundle] pathForResource:@"Teacher" ofType:@"json"]; NSData *data = [NSData dataWithContentsOfFile:path]; // jsonkit 解析数据 NSArray *arr = [data objectFromJSONData];}
- UI基础-XML、JSON 数据结构解析
- UI XML,JSON 数据结构解析
- UI课程15 XML、JSON数据结构解析
- UI第十五天:XML、JSON数据结构解析
- UI day 14 XML JSON数据结构解析
- XML.JSON数据结构解析
- XML、JSON数据结构解析
- XML,JSON数据结构解析
- UIday1502:XML 、JSON 数据结构解析
- [TwistedFate]XML JSON数据结构解析
- IOS--UI--LessonParse 数据解析 XML JSON
- UI进阶:数据解析(XML解析和JSON解析)
- 第十五讲:XML、JSON数据结构解析
- iOS之JSON,XML数据结构解析
- iOS编程------XML、JSON数据结构解析
- UI进阶——XML解析与Json解析
- UI一揽子计划 15 (XML的解析方式 (SAX解析/ DOM解析) 、JSON 解析)
- UI---JSON数据解析
- 一步一步教你Socket编程
- 初识RMAN2:12C中数据文件和归档日志的保留策略
- 自定义控件-侧拉菜单
- 华为的模式
- Oracle ROWID详解
- UI基础-XML、JSON 数据结构解析
- 运算符重载
- 关于Handler 使用This Handler class should be static or leaks might occur 警告处理
- 手册下载
- 09_Java运算符
- C++学习网站
- 一个挑剔的吃货(水桶问题)
- vector调用erase 后运行时异常vector iterators incompatible
- 原理图初识之GPIO