解析XML
// // ParserDataViewController.m // AppUI组件学习 // Created by 麦子 on 15/6/27. // Copyright (c) 2015年 麦子. All rights reserved. // #import "ParserDataViewController.h" #import "StudentByXml.h" @interface ParserDataViewController (){ NSMutableArray *array; StudentByXml *xmlEntity; NSString *proName; bool flag; } @end @implementation ParserDataViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; self.title = @"xml和Json数据解析"; [self create]; } - (void)create{ UIButton *json = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [json setTitle:@"json解析" forState:UIControlStateNormal]; json.tag = 1; json.frame = CGRectMake(50,100,300, 100); [json addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:json];
UIButton *xml = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [xml setTitle:@"xml解析" forState:UIControlStateNormal]; xml.frame = CGRectMake(50, 100); xml.tag = 2; [xml addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:xml]; } // 初步熟悉网络请求 - (void)netWorkByStudent:(NSString *)urlRequest{ // 组装URL请求对象 NSURL *url = [NSURL URLWithString:urlRequest]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
// 请求设置 [request setHTTPMethod:@"post"]; // 设置参数 NSString *str = @"city=AA&password=12345"; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; [request setHTTPBody:data];
// 返回结果 -- 同步和异步 NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; // 对数据处理,如字符串 NSString *resultStr = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
} - (void)btnClick:(UIButton *)btn{
switch (btn.tag) { case 1:{
break; } case 2:{ // 获取完整路径 NSString *path = [[NSBundle mainBundle]pathForResource:@"xml_demo" ofType:@"xml"]; // 读到内存中 NSData *data = [NSData dataWithContentsOfFile:path]; // 构建xml对象 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; // 设定代理对象 parser.delegate = self; // 开始转换 [parser parse];
// 解析内存数据 // NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// NSLog(@"%@",content);
break; } default: break; } } // 文档开始 - (void)parserDidStartDocument:(NSXMLParser *)parser{ array = [[NSMutableArray alloc] initWithCapacity:100]; } // 元素开始 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ if (flag) { proName = elementName; } if ([elementName isEqualToString:@"student"]) { xmlEntity = [[StudentByXml alloc] init]; flag = true;
// 获取属性----强大的KVC,对于不确定但是有规律的key来说,简单方便。 NSArray *keyArray = [attributeDict allKeys]; for (NSString *key in keyArray) { [xmlEntity setValue:[attributeDict objectForKey:key] forKey:key]; } }
} // 利用KVC形式设置数据 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; // if (![string isEqualToString:@"n"]) { if (flag && proName.length > 0 && string.length > 0) { [xmlEntity setValue:string forKey:proName]; proName = @""; } // } } // 元素结束 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ if (flag && [elementName isEqualToString:@"student"]) { flag = false; [array addObject:xmlEntity]; NSLog(@"%@--%@---%ld--%@---%@",xmlEntity.name,xmlEntity.sex,xmlEntity.age,xmlEntity.school,xmlEntity.area); } } // 文档结束 - (void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"%@",array); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |