XML文件解析
SAX解析
利用的是系统的 NSXMLParser( xml分析者 类)
以驱动事件循环进行xml的解析(利用触发的代理方法进行解析)
真谛: 逐行解析
解析步骤:
1.创建分析人类 进行分析
// 获取路径
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];
2.实现代理方法
// 已经开始分析文件
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
// 此处应该初始化数组
self.arr = [NSMutableArray array];
}
// 已经遇到开始节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
// 只有遇到节点名为 Student 的节点开始标签 才需初始化model
if ([elementName isEqualToString:@"Student"]) {
self.model = [[Model alloc] init];
}
}
// 发现字符串
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
// 此处需要保存发现的字符串
self.string = string;
}
// 已经遇到结束节点
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// 此处应该对model进行赋值
if ([elementName isEqualToString:@"name"]) {
self.model.name = self.string;
}
if ([elementName isEqualToString:@"gender"]) {
self.model.gender = self.string;
}
if ([elementName isEqualToString:@"age"]) {
self.model.age = self.string;
}
if ([elementName isEqualToString:@"motto"]) {
self.model.motto = self.string;
}
// model属性赋值完后还应该 给数组添加model
if ([elementName isEqualToString:@"Student"]) {
[self.arr addObject:self.model];
[_model release];
}
}
// 已经结束文件分析
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
// 这时装完所有的model 可以打印看看
NSLog(@"%@",self.arr);
}
Dom解析
Dom解析 依靠第三方类库GDataXMLNode
GDataXMLNode类 依靠系统的libxml2 来使用
使用的时候 需要导入libxml2 框架 并且将Header Search Paths 设置成 /usr/include/libxml2
真谛:把所有的节点一次性读取 并转化为 树形结构 整体解析(与SAX解析的区别)
解析步骤:
自定义一个方法 用self 调用之
- (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];
// rootElement包含根节点以及下面的所有数据
NSLog(@"%@",[rootElement stringValue]);
// 获取根节点下 student节点
NSArray *elementArray = [rootElement elementsForName:@"Student"];
self.array = [NSMutableArray array];
// 便利数组 对每一个Student节点 继续化整为零
for (GDataXMLElement *oneElement in elementArray) {
// 调用方法
NSString *name = [self getvalueWith:oneElement elementName:@"name"];
NSString *gender = [self getvalueWith:oneElement elementName:@"gender"];
NSString *age = [self getvalueWith:oneElement elementName:@"age"];
NSString *motto = [self getvalueWith:oneElement elementName:@"motto"];
Model *model = [[Model alloc] init];
model.name = name;
model.gender = gender;
model.age = age;
model.motto = motto;
// 装进数组
[self.array addObject:model];
[model release];
}
}
// 调用方法
- (NSString *)getvalueWith:(GDataXMLElement *)oneElement elementName:(NSString *)elementName
{
// 取出name节点数组
NSArray *ElementArray = [oneElement elementsForName:elementName];
// 从数组中取出name节点
GDataXMLElement *element = ElementArray[0];
// 把节点中的值取出来
NSString *value = [element stringValue];
return value;
}
JSON文件解析
解析json数据
真谛: 必须要知道 json文件最外层是什么
[ ]是数组 { }是字典
NSJSONSerialization类
NSString *path = [[NSBundle mainBundle] pathForResource:@"area" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSMutableArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
self.dataArr = [NSMutableArray array];
for (int i = 0; i < arr.count; i++) {
AreaModel *model = [[AreaModel alloc] init];
NSDictionary *oneDic = arr[i];
[model setValuesForKeysWithDictionary:oneDic];
[self.dataArr addObject:model];
[model release];
}
JSONKit类
NSString *path = [[NSBundle mainBundle] pathForResource:@"area" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSArray *array = [data objectFromJSONData];
/...下面步骤同NSJSONSerialization类/