加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML DOM JSON 解析

发布时间:2020-12-16 09:17:21 所属栏目:百科 来源:网络整理
导读:#import "MyViewController.h" @interface MyViewController () @end @implementation MyViewController - ( void )viewDidLoad { [ super viewDidLoad ]; // Do any additional setup after loading the view. } - ( void )didReceiveMemoryWarning { [ sup

#import "MyViewController.h"


@interface MyViewController ()


@end


@implementation MyViewController


- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

}


- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}


/*

#pragma mark - Navigation


// In a storyboard-based application,you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

// Get the new view controller using [segue destinationViewController].

// Pass the selected object to the new view controller.

}

*/


#pragma mark --SAX解析

// SAX特点: 逐行按每个标签进行解析

// 优点: 适合处理大型数据,不占内存

// 缺点: 不能对某个标签进行修改,不能定位到某个指定的标签

- (IBAction)myButton:(UIButton *)sender

{

// 1.获取文件

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Students" ofType:@"txt"];

// 2.将文件转换成NSData类型

NSData *data = [NSData dataWithContentsOfFile:filePath];

// 3.用系统自带工具NSXMLParser解析数据

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];

// 4.设置代理 签订协议并用代理方法解析

parser.delegate = self;

// 5.开始解析xml

[parser parse];

[parser release];

}



#pragma mark -- 解析电影list

- (IBAction)movieButton:(UIButton *)sender

{

NSString *file = [[NSBundle mainBundle] pathForResource:@"movielist副本" ofType:@"txt"];

NSData *data = [NSData dataWithContentsOfFile:file];

NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

NSLog(@"dic = %@",dic);

// 取出字典中keyerror_code的值

NSString *error_codeStr = [NSString stringWithFormat:@"%@",[dic objectForKey:@"error_code"]];

NSLog(@"error_codeStr = %@",error_codeStr);

NSString *reasonStr = [NSString stringWithFormat:@"%@",[dic objectForKey:@"reason"]];

NSLog(@"reasonStr = %@",reasonStr);

if ([error_codeStr isEqualToString:@"0"]) {

NSLog(@"网络请求数据成功");

NSMutableArray *array = [dic objectForKey:@"result"];

NSLog(@"result = %@",array);

} else if ([error_codeStr isEqualToString:@"0001"]) {

NSLog(@"提示用户网络请求失败,请重新加载");

// 弹出提示框 当用户点确定时 帮助用户重新加载

}

}


#pragma mark --1.开始解析

- (void)parserDidStartDocument:(NSXMLParser *)parser

{

NSLog(@"开始解析");

// 1.初始化数组

self.allStudentArray = [NSMutableArray array];

}


#pragma mark --2.开始解析标签

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

{

NSLog(@"开始标签 = %@",elementName);

// 根据开始标签stu判断是否是学生 如果是,创建一个学生对象

if ([elementName isEqualToString:@"stu"]) {

Students *stu = [[Students alloc] init];

// 将学生对象放入数组中

[self.allStudentArray addObject:stu];

[stu release];

}

self.currentElement = elementName;

}


#pragma mark --3.解析标签值

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{


// 取出学生对象,并赋值

Students *stu = [self.allStudentArray lastObject];

/*

// 判断如果当前的开始标签是<name>那么我就将值存入

if ([self.currentElement isEqualToString:@"name"]) {

stu.name = string;

}

if ([self.currentElement isEqualToString:@"number"]) {

stu.number = string;

if ([self.currentElement isEqualToString:@"time"]) {

stu.time = string;

if ([self.currentElement isEqualToString:@"address"]) {

stu.address = string;

*/

// 键值编码 根据key 自动匹配属性值

// 如果你的key值跟属性名一样,kvc会自动给属性value赋值

[stu setValue:string forKey:self.currentElement];

}


#pragma mark --4.解析标签结束

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

{

self.currentElement = nil;

NSLog(@"结束标签 = %@",elementName);

}


#pragma mark --5.解析结束

- (void)parserDidEndDocument:(NSXMLParser *)parser

{

for (Students *stu in self.allStudentArray) {

NSLog(@"name = %@ number = %@ time = %@ address = %@",stu.name,stu.number,stu.time,stu.address);

}

NSLog(@"结束标签");

}






#pragma mark Dom解析

- (IBAction)button1:(UIButton *)sender

{

NSLog(@"Dom解析");

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Students" ofType:@"txt"];

NSData *data = [NSData dataWithContentsOfFile:filePath];

// 1.创建Dom解析工具对象

GDataXMLDocument *xmlDocument = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];

// 2.获取根节点

GDataXMLElement *rootElement = xmlDocument.rootElement;

NSLog(@"root = %@",rootElement);

// 6.创建存放model学生的数组

self.allStudentArray = [NSMutableArray array];

// 3.遍历根节点上的子节点

for (GDataXMLElement *subElement in rootElement.children) {

// 5.循环创建存放学生属性值的对象

Students *stu = [[Students alloc] init];

NSLog(@"子节点 = %@",subElement);

// 4.遍历子节点上的子节点

for (GDataXMLElement *ssubElement in subElement.children) {

// 7.kvc进行赋值

[stu setValue:ssubElement.stringValue forKey:ssubElement.name];

}

[self.allStudentArray addObject:stu];

[stu release];


}

// GDataXMLElement *twoElement = [rootElement.children objectAtIndex:1];

// NSLog(@"获取第二个子节点 = %@",twoElement);

for (Students *stu in self.allStudentArray) {

address);

}


}







#pragma mark json解析

- (IBAction)button2:(UIButton *)sender

{

NSLog(@"json");

// 1.找到文件路径

NSString *file = [[NSBundle mainBundle] pathForResource:@"Teachers副本" ofType:@"txt"];

NSData *data = [NSData dataWithContentsOfFile:file];

// 2.通过系统自带的json解析工具解析数据

NSMutableArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

NSLog(@"array = %@",array);

self.allStudentArray = [NSMutableArray array];

for (NSDictionary *dic in array) {

Students *stu = [[Students alloc] init];

[stu setValuesForKeysWithDictionary:dic];

[self.allStudentArray addObject:stu];

[stu release];

}

for (Students *stu in self.allStudentArray) {

NSLog(@"name = %@ number = %@ gender = %@ phone = %@",stu.gender,stu.phone);

}

// jsonkit工具解析json数据

NSMutableArray *array2 = [data objectFromJSONData];

NSLog(@"array2 = %@",array2);

}






@end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读