iOS UI 14 网络解析
2015-12-13 16:18
441 查看
//
// RootViewController.m
// ui - 14 数据解析
//
// Created by dllo on 15/11/26.
// Copyright (c) 2015年 dllo. All rights reserved.
//
#import "RootViewController.h"
#import "Student.h"
#import "GDataXMLNode.h"
@interface RootViewController ()<NSXMLParserDelegate>
@property (nonatomic,
retain)NSMutableArray *stuArr;
@property (nonatomic,
retain)NSMutableArray *stuArr2;
@property (nonatomic ,copy)NSString *elementStr;
@end
@implementation RootViewController
- (void)dealloc
{
[_stuArr release];
[_stuArr2 release];
// [_elementStr release];
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
button1.frame = CGRectMake(50, 100, 100, 50);
button1.backgroundColor = [UIColor
cyanColor];
[button1 setTitle:@"XML/SAX"
forState:UIControlStateNormal];
[button1 addTarget:self
action:@selector(saxAction)
forControlEvents:UIControlEventTouchUpInside];
[self.view
addSubview:button1];
UIButton *button2 = [UIButton
buttonWithType:UIButtonTypeCustom];
button2.frame =
CGRectMake(50, 200, 100, 50);
button2.backgroundColor = [UIColor
cyanColor];
[button2 setTitle:@"XML/Dom"
forState:UIControlStateNormal];
[button2 addTarget:self
action:@selector(domAction)
forControlEvents:UIControlEventTouchUpInside];
[self.view
addSubview:button2];
// Do any additional setup after loading the view.
}
//dom 与 sax
比较
// dom 先将数据全部取到内存,在解析, sax逐行取数据并解析
//dom更耗费内存,不适合大数据解析,但更加灵活,
可以解析获取指定行数据
//sax不耗费内存,但不灵活,只能逐行按顺序解析
/*******************************XML的sax工具解析************************/
- (void)saxAction
{
NSString *file = [[NSBundle
mainBundle] pathForResource:@"Student"
ofType:@"xml"];
//二进制流
安全
NSData *data = [NSData
dataWithContentsOfFile:file ];
NSXMLParser *parser = [[[NSXMLParser
alloc] initWithData:data]
autorelease];
parser.delegate =
self;
//开始解析
[parser parse];
}
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
NSLog(@"开始解析");
//开辟数组空间
self.stuArr = [NSMutableArray
array];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString
*)qName attributes:(NSDictionary *)attributeDict
{
NSLog(@"只解析开始标签:%@",elementName);
//可以全局访问开始标签
self.elementStr = elementName;
//若开始标签是student,创建学生对象并添加到数组中
if ([elementName
isEqualToString:@"student"]) {
Student *stu = [[Student
alloc]init];
[self.stuArr
addObject:stu];
[stu release];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSLog(@"解析标签值:%@",string);
//获取正在编辑的学生对象
Student *stu =
self.stuArr.lastObject;
//为学生对象赋值
if ([self.elementStr
isEqualToString:@"name"]) {
stu.name = string;
}
if ([self.elementStr
isEqualToString:@"number"]) {
stu.number = string;
}
if ([self.elementStr
isEqualToString:@"sex"]) {
stu.sex = string;
}
if ([self.elementStr
isEqualToString:@"phone"]) {
stu.phone = string;
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"结束解析");
for (Student *stu
in self.stuArr) {
NSLog(@"%@ %@ %@ %@",stu.name, stu.sex, stu.number, stu.phone);
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString
*)qName
{
NSLog(@"只解析结束标签:%@",elementName);
//********************************防止已经解析好的标签值被非预期的标签值覆盖
self.elementStr =nil;
}
/*******************************XML的dom工具解析************************/
-(void)domAction
{
self.stuArr2 = [NSMutableArray
array];
NSString *file = [[NSBundle
mainBundle] pathForResource:@"Student"
ofType:@"xml"];
//二进制流
安全
NSData *data = [NSData
dataWithContentsOfFile:file ];
//*****************添加第三方工具dom的方法
//添加路径 : buliding setting - > Header Search paths - >
添加路径: /usr/include/libxml2
//
添加库:building Phases -> Link...
添加库:libxml2.dylib或libxml2.tbd
//参数1
从文件中读取的data对象
//参数2
预留参数
写0;
//参数3
错误信息,
若不需要可写nil
GDataXMLDocument *xmLD = [[[GDataXMLDocument
alloc]initWithData:data
options:0 error:nil]autorelease];
GDataXMLElement *xmLE = xmLD.rootElement;
// NSLog(@"整体信息:%@", xmLE);
for (GDataXMLElement *subxmle
in xmLE.children) {
// NSLog(@"每名学生的信息:%@", subxmle);
//创建学生对象
Student *stu = [[Student
alloc]init];
for (GDataXMLElement *element
in subxmle.children) {
// NSLog(@"具体信息,每一条信息,
如名字,学号,性别,电话:%@",element);
//有一个属性
//NSLog(@"标签:%@
标签值:%@",element.name, element.stringValue);
[stu setValue:element.stringValue
forKey:element.name];
}
[self.stuArr2
addObject:stu];
[stu release];
}
for (Student *stu
in self.stuArr2) {
NSLog(@"%@ %@ %@ %@",stu.name, stu.sex, stu.number, stu.phone);
}
}
- (void)didReceiveMemoryWarning {
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
// RootViewController.m
// ui - 14 数据解析
//
// Created by dllo on 15/11/26.
// Copyright (c) 2015年 dllo. All rights reserved.
//
#import "RootViewController.h"
#import "Student.h"
#import "GDataXMLNode.h"
@interface RootViewController ()<NSXMLParserDelegate>
@property (nonatomic,
retain)NSMutableArray *stuArr;
@property (nonatomic,
retain)NSMutableArray *stuArr2;
@property (nonatomic ,copy)NSString *elementStr;
@end
@implementation RootViewController
- (void)dealloc
{
[_stuArr release];
[_stuArr2 release];
// [_elementStr release];
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
button1.frame = CGRectMake(50, 100, 100, 50);
button1.backgroundColor = [UIColor
cyanColor];
[button1 setTitle:@"XML/SAX"
forState:UIControlStateNormal];
[button1 addTarget:self
action:@selector(saxAction)
forControlEvents:UIControlEventTouchUpInside];
[self.view
addSubview:button1];
UIButton *button2 = [UIButton
buttonWithType:UIButtonTypeCustom];
button2.frame =
CGRectMake(50, 200, 100, 50);
button2.backgroundColor = [UIColor
cyanColor];
[button2 setTitle:@"XML/Dom"
forState:UIControlStateNormal];
[button2 addTarget:self
action:@selector(domAction)
forControlEvents:UIControlEventTouchUpInside];
[self.view
addSubview:button2];
// Do any additional setup after loading the view.
}
//dom 与 sax
比较
// dom 先将数据全部取到内存,在解析, sax逐行取数据并解析
//dom更耗费内存,不适合大数据解析,但更加灵活,
可以解析获取指定行数据
//sax不耗费内存,但不灵活,只能逐行按顺序解析
/*******************************XML的sax工具解析************************/
- (void)saxAction
{
NSString *file = [[NSBundle
mainBundle] pathForResource:@"Student"
ofType:@"xml"];
//二进制流
安全
NSData *data = [NSData
dataWithContentsOfFile:file ];
NSXMLParser *parser = [[[NSXMLParser
alloc] initWithData:data]
autorelease];
parser.delegate =
self;
//开始解析
[parser parse];
}
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
NSLog(@"开始解析");
//开辟数组空间
self.stuArr = [NSMutableArray
array];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString
*)qName attributes:(NSDictionary *)attributeDict
{
NSLog(@"只解析开始标签:%@",elementName);
//可以全局访问开始标签
self.elementStr = elementName;
//若开始标签是student,创建学生对象并添加到数组中
if ([elementName
isEqualToString:@"student"]) {
Student *stu = [[Student
alloc]init];
[self.stuArr
addObject:stu];
[stu release];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSLog(@"解析标签值:%@",string);
//获取正在编辑的学生对象
Student *stu =
self.stuArr.lastObject;
//为学生对象赋值
if ([self.elementStr
isEqualToString:@"name"]) {
stu.name = string;
}
if ([self.elementStr
isEqualToString:@"number"]) {
stu.number = string;
}
if ([self.elementStr
isEqualToString:@"sex"]) {
stu.sex = string;
}
if ([self.elementStr
isEqualToString:@"phone"]) {
stu.phone = string;
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"结束解析");
for (Student *stu
in self.stuArr) {
NSLog(@"%@ %@ %@ %@",stu.name, stu.sex, stu.number, stu.phone);
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString
*)qName
{
NSLog(@"只解析结束标签:%@",elementName);
//********************************防止已经解析好的标签值被非预期的标签值覆盖
self.elementStr =nil;
}
/*******************************XML的dom工具解析************************/
-(void)domAction
{
self.stuArr2 = [NSMutableArray
array];
NSString *file = [[NSBundle
mainBundle] pathForResource:@"Student"
ofType:@"xml"];
//二进制流
安全
NSData *data = [NSData
dataWithContentsOfFile:file ];
//*****************添加第三方工具dom的方法
//添加路径 : buliding setting - > Header Search paths - >
添加路径: /usr/include/libxml2
//
添加库:building Phases -> Link...
添加库:libxml2.dylib或libxml2.tbd
//参数1
从文件中读取的data对象
//参数2
预留参数
写0;
//参数3
错误信息,
若不需要可写nil
GDataXMLDocument *xmLD = [[[GDataXMLDocument
alloc]initWithData:data
options:0 error:nil]autorelease];
GDataXMLElement *xmLE = xmLD.rootElement;
// NSLog(@"整体信息:%@", xmLE);
for (GDataXMLElement *subxmle
in xmLE.children) {
// NSLog(@"每名学生的信息:%@", subxmle);
//创建学生对象
Student *stu = [[Student
alloc]init];
for (GDataXMLElement *element
in subxmle.children) {
// NSLog(@"具体信息,每一条信息,
如名字,学号,性别,电话:%@",element);
//有一个属性
//NSLog(@"标签:%@
标签值:%@",element.name, element.stringValue);
[stu setValue:element.stringValue
forKey:element.name];
}
[self.stuArr2
addObject:stu];
[stu release];
}
for (Student *stu
in self.stuArr2) {
NSLog(@"%@ %@ %@ %@",stu.name, stu.sex, stu.number, stu.phone);
}
}
- (void)didReceiveMemoryWarning {
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
相关文章推荐
- iOS UI 14 网络解析
- Android中网络请求放在子线程中问题
- centos7 开放tcp端口
- HTTP
- SEVER&&HTTP
- 剖析STL容器遍历删除时诡异的erase(iter++) http://bbs.csdn.net/topics/100044107
- codeforces 546E. Soldier and Traveling 网络流
- STL的erase()陷阱-迭代器失效总结 http://www.tuicool.com/articles/zYv67b
- STL中erase()小心使用 http://blog.csdn.net/yangruibao/article/details/9040045
- 迭代器的问题 http://www.nowcoder.com/test/question/done?tid=2198842&qid=5962#summary
- Linux(Centos6.5)下安装svn服务器,并通过http访问
- Apache Camel http4 blueprint
- android122 zhihuibeijing 新闻中心NewsCenterPager加载网络数据实现
- http://webhelp.esri.com/arcgisexplorer/2500/zh-CN/index.html#add_raster_data.htm
- 多线程 http://www.nowcoder.com/test/question/done?tid=2198842&qid=3939#summary
- c++ 初始化 http://www.nowcoder.com/test/question/done?tid=2198842&qid=25454#summary
- Android ListView网络加载图片之内存缓存
- 数组名取地址 http://www.oschina.net/question/234345_48794?fromerr=KZCzKcSM
- httpd.conf
- 判断任意两台计算机的IP地址是否属于同一子网络