XML和json解析
来源:互联网 发布:域名那家继费便宜 编辑:程序博客网 时间:2024/04/28 01:41
DomTool.h
#import <Foundation/Foundation.h>#import "Student.h"@interface DomTool : NSObject-(void)startDom;@property(nonatomic,retain)NSMutableArray *stuArr;+(NSMutableArray *)startXMLDom;@end
DomTool.m
#import "DomTool.h"#import "GDataXMLNode.h"@implementation DomTool-(void)startDom{ // 先获取路径 NSString *path=[[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"]; NSData *data=[NSData dataWithContentsOfFile:path]; //参数1:需要处理的数据 //参数2:没什么用,0就行 //参数3:错误信息 GDataXMLDocument *document=[[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; //找到数据的根节点 GDataXMLElement *rootRlement=[document rootElement]; //找到所有的student的节点 NSArray *arr=[rootRlement elementsForName:@"student"]; //先对属性数组进行初始化 self.stuArr=[NSMutableArray array]; //遍历数组 for(NSInteger i = 0;i<arr.count;i++){ //创建一个学生对象 Student *stu=[[Student alloc] init]; //找到每一个student节点对应的内容 GDataXMLElement *stuElement=arr[i]; //根据节点名,对student节点里的内容进行获取 GDataXMLElement *name=[[stuElement elementsForName:@"name"] lastObject]; //对学生姓名进行赋值 stu.name=[name stringValue]; [self.stuArr addObject:stu]; }}//解析过程和之前加号方法一样+(NSMutableArray *)startXMLDom{ // 先获取路径 NSString *path=[[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"]; NSData *data=[NSData dataWithContentsOfFile:path]; //参数1:需要处理的数据 //参数2:没什么用,0就行 //参数3:错误信息 GDataXMLDocument *document=[[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; //找到数据的根节点 GDataXMLElement *rootRlement=[document rootElement]; //找到所有的student的节点 NSArray *arr=[rootRlement elementsForName:@"student"]; //先对属性数组进行初始化 NSMutableArray *stuArr=[NSMutableArray array]; //遍历数组 for(NSInteger i = 0;i<arr.count;i++){ //创建一个学生对象 Student *stu=[[Student alloc] init]; //找到每一个student节点对应的内容 GDataXMLElement *stuElement=arr[i]; //根据节点名,对student节点里的内容进行获取 GDataXMLElement *name=[[stuElement elementsForName:@"name"] lastObject]; //对学生姓名进行赋值 stu.name=[name stringValue]; [stuArr addObject:stu]; } return stuArr;}
Student.h
#import <Foundation/Foundation.h>@interface Student : NSObject@property(nonatomic,copy)NSString *name;@property(nonatomic,copy)NSString *age;@property(nonatomic,copy)NSString *hobby;@property(nonatomic,copy)NSString *sex;@end
Student.m
#import "Student.h"@implementation Student-(void)setValue:(id)value forUndefinedKey:(NSString *)key{}@end
ParserTool.h
#import <Foundation/Foundation.h>#import "Student.h"@interface ParserTool : NSObject<NSXMLParserDelegate>//先设置一个开始解析的方法-(void)startParser;//把处理好数据的学生,方放到数组里,然后直接使用数组就可以@property(nonatomic,retain)NSMutableArray *stuArr;@end
ParserTool.m
#import "ParserTool.h"@interface ParserTool ()//用来保存标签的内容@property(nonatomic,copy)NSString *tempStr;@end@implementation ParserTool-(void)startParser{ //先找到文件的路径 NSString *path=[[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"]; //把路径对应的文件转换成NSData NSData *data=[NSData dataWithContentsOfFile:path]; //创建一个xml的解析工具 NSXMLParser *parser=[[NSXMLParser alloc] initWithData:data]; //设置代理人 parser.delegate=self; //开始解析 [parser parse];}#pragma mark 开始解析,执行协议方法-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{ //根据不同的节点名,进行不同的操作 if([elementName isEqualToString:@"Student"]){ self.stuArr=[NSMutableArray array]; }else if([elementName isEqualToString:@"student"]){ //如果是小写student创建一个学生对象 Student *stu=[[Student alloc] init]; [self.stuArr addObject:stu]; }}#pragma mark 通过这个协议方法能找到标签之间的内容,但是标签之间如果夹得还是标签,则没有内容-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ //这个方法只要找到节点内容就会触发 self.tempStr=string;}#pragma mark 当节点结束的时候,会执行这个方法-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ //先找到没有设置好的学生 Student *stu=[self.stuArr lastObject];// if ([elementName isEqualToString:@"name"]) {// stu.name=self.tempStr;// }else if ([elementName isEqualToString:@"hobby"]){// stu.hobby=self.tempStr;// }else if ([elementName isEqualToString:@"age"]){// stu.age=self.tempStr;// }else if([elementName isEqualToString:@"sex"]){// stu.sex=self.tempStr;// } //这个写法可以替代上面的if [stu setValue:self.tempStr forKey:elementName];}
ViewController.m
#import "ViewController.h"#import "ParserTool.h"#import "Student.h"#import "DomTool.h"@interface ViewController ()- (IBAction)PerserAction:(id)sender;- (IBAction)DOMAction:(id)sender;- (IBAction)jsonserAction:(id)sender;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (IBAction)PerserAction:(id)sender { ParserTool *tool=[[ParserTool alloc] init]; [tool startParser]; //遍历学生姓名 for (Student *stu in tool.stuArr) { NSLog(@"%@",stu.name); }}- (IBAction)DOMAction:(id)sender {// DomTool *tool=[[DomTool alloc] init];// [tool startDom];// for (Student *stu in tool.stuArr) {// NSLog(@"%@",stu.name);// } //加号方法 NSMutableArray *arr=[DomTool startXMLDom]; for (Student *stu in arr) { NSLog(@"%@",stu.name); }}- (IBAction)jsonserAction:(id)sender { NSString *path=[[NSBundle mainBundle] pathForResource:@"movielist" ofType:@"test"]; NSData *data=[NSData dataWithContentsOfFile:path]; NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];}@end
0 0
- xml和json解析
- json和xml解析
- XML和JSON解析
- json和xml解析
- json和xml解析
- JSON和XML解析
- XML和JSon解析
- XML和json解析
- JSON和XML解析
- xml和json解析
- XML解析和JSON
- JSON 和xml解析
- JSON解析和XML解析
- JSON解析和XML解析
- XML和JSON解析笔记
- XML和JSON及其解析
- XStream解析xml和json
- XML 和 JSON 解析数据
- leetcode之Flatten Binary Tree to Linked List
- Hive中分组取前N个值
- 行高 line-height
- Hive的文件格式比较
- 常用工具类
- XML和json解析
- 关于Segmentation fault(段错误)探究
- Hive命令的3种调用方式
- Hive 设置map 和 reduce 的个数
- 关于iOS默认中文输入法乱码的Bug解决记录
- 机器学习方法(六):随机森林Random Forest,bagging
- 【LWJGL2 WIKI】【基础篇】基础5:全屏
- 黑马程序员-C语言-self和super
- 业余非专业型IT人员杂谈