//
// 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, 300, 300, 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