[TwistedFate]XML JSON数据结构解析

来源:互联网 发布:部落冲突骷髅药水数据 编辑:程序博客网 时间:2024/05/19 13:09

XML数据解析

SAX解析

simple API for XML

解析xml数据

- (void)xmlParserUpData{//  利用的是系统的NSXMLParser//  xml分析类//  以驱动事件进行xml的解析(利用触发得的代理方法解析)//  特点: 逐行解析//  获取路径    NSString *path = [[NSBundle  mainBundle] pathForResource:@"Student" ofType:@"xml"];    //  创建要分析的二进制文件    NSData *data = [NSData dataWithContentsOfFile:path];    //  创建分析人    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];    //  驱动事件(设置代理)    parser.delegate = self;    //  开始分析    [parser parse];    [parser release];}

NSXMLParser代理方法实现

//  数组(保存model)//  model保存节点中间的 值 (字符串)//  已经开始分析文件- (void)parserDidStartDocument:(NSXMLParser *)parser{    self.dataArray = [NSMutableArray array];    NSLog(@"已经开始分析文件");}//  已经开始遇到节点- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    //  遇到student节点时初始化student    if ([elementName isEqualToString:@"Student"]) {        self.stu = [[Student alloc] init];    }//    NSLog(@"<%@>",elementName);//    NSLog(@"已经开始遇到节点");}//  发现字符串- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{        self.str = string;//    NSLog(@"%@",string);//    NSLog(@"发现字符串");}//  遇到结束节点- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{    if ([elementName isEqualToString:@"name"]) {        self.stu.name = self.str;    }else if ([elementName  isEqualToString:@"gender"]){        self.stu.gender = self.str;    }else if ([elementName isEqualToString:@"age"]){        self.stu.age = self.str;    }else if([elementName isEqualToString:@"motto"]){        self.stu.motto = self.str;    }else if([elementName isEqualToString:@"Student"]){        [self.dataArray addObject:self.stu];        [_stu release];    }//    NSLog(@"</%@>",elementName);//    NSLog(@"已经遇到结束节点");}//  结束文件分析- (void)parserDidEndDocument:(NSXMLParser *)parser{    //  这是装完所有的model    NSLog(@"%@",self.dataArray);    NSLog(@"已经结束文件分析");}

GDataXMLNode第三方类库解析(Dom解析)

引入谷歌的第三方类库GDataXMLNode需要引入系统框架libxml2
1. 工程->General-> Linked FrameWorks and Libraries添加;或者在工程->Build Phases->Link Binary With Libraries下添加
2. 工程->Build Settings->Search Paths->Header Search Paths添加路径 /usr/include/libxml2

- (void)GDataXMLNodeUpData{//  获取文件路径    NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];    //  创建一个data对象    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 *elmentArray = [rootElement elementsForName:@"Student"];    //  初始化数组    self.dataArray = [NSMutableArray array];    //  遍历数组 对每一个sudent节点继续化整为零    for (GDataXMLElement *elment in elmentArray) {//        //  取出name节点//        NSArray *nameElmentArray = [elment elementsForName:@"name"];//        //        //  从数组中取出name节点的值//        GDataXMLElement *nameElement = nameElmentArray[0];//        //        //  把节点中的值取出来//        NSString *name = [nameElement stringValue];        Student *stu = [[Student alloc] init];        NSString *name = [self dataToString:elment elementName:@"name"];        stu.name = name;        NSString *age = [self dataToString:elment elementName:@"age"];        stu.age = age;        NSString *gender = [self dataToString:elment elementName:@"gender"];        stu.gender = gender;        NSString *motto = [self dataToString:elment elementName:@"motto"];        stu.motto = motto;        [self.dataArray addObject:stu];        //  释放 ++++++++++++++++        [stu release];    }}
//  1.找报红的对象(报红方法中没有,需要外界传递)//  2.找可变对象(例如name等 需要外界传递)//  3.选好返回值- (NSString *)dataToString:(GDataXMLElement *)element elementName:(NSString *)elementName{    //  取出name节点    NSArray *nameElmentArray = [element elementsForName:elementName];    //  从数组中取出name节点的值    GDataXMLElement *nameElement = nameElmentArray[0];    //  把节点中的值取出来    NSString *name = [nameElement stringValue];    return name;}

JSON数据结构解析

  //  路径    NSString *path = [[NSBundle mainBundle] pathForResource:@"area" ofType:@"json"];    //  获取数据    NSData *data = [NSData dataWithContentsOfFile:path];        // 用容器接收Json格式的数据    NSMutableArray *array = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];    self.dataArray = [NSMutableArray array];    for (NSDictionary *oneDic in array) {//        NSArray *cityArray = oneDic[@"cityList"];//        //        [self.dataDic setObject:cityArray forKey:oneDic[@"province"]];        CityModel *model  = [[CityModel alloc] init];        [model setValuesForKeysWithDictionary:oneDic];        [self.dataArray addObject:model];        [model release];    }
0 0
原创粉丝点击