网络解析数据

来源:互联网 发布:青年文明号在线网络办公协同系统 编辑:程序博客网 时间:2024/04/27 19:08

json解析数据

以下是苹果自带的数据解析的方式, 也是最常用的解析方式

//     json数据特点://     中括号表示: 数组//     大括号表示: 字典       // 1. 获取路径    NSString *path = [[NSBundle mainBundle] pathForResource:@"Teacher.json" ofType:nil];    // 2. 转化成data    NSData *data = [NSData dataWithContentsOfFile:path];       // 3. 利用data转化成可变数组 或者可变字典, 是构造成数组还是可变字典, 看数据最外层是啥    NSMutableArray *dataArr = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];    // 注意字典中各数据的类型, 若程序崩溃, 首先查看字典中的数据类型和model中的类型是否一致    NSMutableArray *modelArr = [NSMutableArray array];    for (NSDictionary *dic in dataArr) {        TeacherModel *model = [[TeacherModel alloc] init];        [model setValuesForKeysWithDictionary:dic];        [modelArr addObject:model];    }




XML数据解析


// 利用GDDataXMLNode进行DOM解析- (void)setUpGDDataXML {    // 获取文件路径    NSString *path = [[NSBundle mainBundle] pathForResource:@"Teacher.xml" ofType:nil];       // 转化成NSData    NSData *data = [NSData dataWithContentsOfFile:path];       //  用Data初始化一个对象,    //  DOM解析一次性读取文件中所有信息    //  把data转化成GDataXMLDocument这个类可以操作的对象       //error:<#(NSError **)#>: 构建一个空的错误对象//    // 想得到错误信息://    NSError *error = nil;//    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:&error];    // 不想得到错误信息:    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];       // 获取根节点, 以及中间所有的节点, GDataXMLElement表示节点    GDataXMLElement *rootElement = [document rootElement];       // 获取teacher的三个节点的数组    NSArray *subArray = [rootElement children];       self.dataArr = [NSMutableArray array];       // 遍历这个数组    for (int i = 0; i < subArray.count; i++) {        // 相当于一个teacher        GDataXMLElement *oneElement = subArray[i];        NSString *name = [self forinArr:oneElement string:@"name"];        NSString *gender = [self forinArr:oneElement string:@"gender"];        NSString *age = [self forinArr:oneElement string:@"age"];               // 初始化一个model        TeacherModel *model = [[TeacherModel alloc] init];        model.name = name;        model.gender = gender;        model.age = age;        [self.dataArr addObject:model];    }}

- (void)setUpData {    // 获取xml文件路径    NSString *path = [[NSBundle mainBundle] pathForResource:@"Teacher.xml" ofType:nil];       //[[NSXMLParser alloc] initWithData:(NSData *)], NSData 是转化二进制的类    // 把该路径的文件转化成二进制    NSData *data = [NSData dataWithContentsOfFile:path];       // 创建XML分析器类    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];       // 设置代理    parser.delegate = self;       // 注意!!!!! 要开启分析    [parser parse];       [parser release];}#pragma mark 分析器开始分析文件- (void)parserDidStartDocument:(NSXMLParser *)parser {    NSLog(@"触发分析器, 已经开始分析文件");    // 初始化数组:    // 1. 只初始化一次;   2. 一开始就触发    self.dataArr = [NSMutableArray arrayWithCapacity:1];   }#pragma mark 遇到节点就触发- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {    //NSLog(@"遇到节点就触发");    NSLog(@"<%@>", elementName);    // 判断节点是不是teacher. 若是, 就初始化一个model    if ([elementName isEqualToString:@"Teacher"]) {        self.model = [[TeacherModel alloc] init];    }}#pragma mark 找到内容时触发- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {    NSLog(@"%@", string);    // 保存字符串, 不管数是空格, 还是有用字符串    self.string = string;}#pragma mark 找到节点结束时触发- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {    NSLog(@"</%@>", elementName);    // 如果遇到name结束, 就将保存的字符串赋值给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:@"Teacher"]) {        // 如果遇到Teacher, 就说明model赋值结束了        [self.dataArr addObject:self.model];    }}#pragma mark 结束分析- (void)parserDidEndDocument:(NSXMLParser *)parser {    NSLog(@"结束分析");}}


0 0