iOS Objective-C 解析XML SAX解析方法
2014-01-14 19:13
357 查看
给大家分享一个 解析XML 中的 SAX解析
这是我要解析的XML文件 由于城市过多 我就在中间删掉一部分 方便查看
创建一个SaxParser类
.h中代码
.m中代码
这是我要解析的XML文件 由于城市过多 我就在中间删掉一部分 方便查看
<xml_api_reply version="1"> <cities> <city default="true"> <name data="北京"></name> <latitude_e6 data="39930000"></latitude_e6> <longitude_e6 data="116279998"></longitude_e6> </city> <city> <name data="沈阳"></name> <latitude_e6 data="41770000"></latitude_e6> <longitude_e6 data="123430000"></longitude_e6> </city> <city> <name data="大连"></name> <latitude_e6 data="38900001"></latitude_e6> <longitude_e6 data="121629997"></longitude_e6> </city> <city> <name data="周口"></name> <latitude_e6 data="33000000"></latitude_e6> <longitude_e6 data="114019996"></longitude_e6> </city> <city> <name data="驻马店"></name> <latitude_e6 data="33000000"></latitude_e6> <longitude_e6 data="114019996"></longitude_e6> </city> </cities> </xml_api_reply>
创建一个SaxParser类
.h中代码
#import <Foundation/Foundation.h> @protocol backModel;//我这个协议是回调用的 这里可以忽略这个协议及其方法 @class CityModel; @interface SaxParser : NSObject<NSXMLParserDelegate> { CityModel * _model; //创建一个CityModel类 里面有一个初始化方法即可 NSMutableArray * _cityArray; //用来存放 model的数组 NSString * _currName; //name变量 NSString * _currLat; //lat变量 NSString * _currLon; //lon变量 } -(void)starParser; @property(nonatomic,assign) id<backModel> delegate; @end @protocol backModel <NSObject> //协议方法 回传 -(void)backModelArray:(NSMutableArray *)array; @end
.m中代码
#import "SaxParser.h" #import "CityModel.h" @implementation SaxParser -(void)dealloc{ [_cityArray release]; [super dealloc]; } -(id)init{ if ([super init]) { _cityArray = [[NSMutableArray alloc] init]; //初始化数组 } return self; } //这个方法在RootViewController中用SaxParser的对象去调用 -(void)starParser{ //从bundel包中获取xml文件 NSString * path = [[NSBundle mainBundle] pathForResource:@"citys" ofType:@"xml"]; NSData * data = [NSData dataWithContentsOfFile:path]; NSXMLParser * xml = [[NSXMLParser alloc] initWithData:data]; xml.delegate = self; //设置代理人 [xml parse]; //开始解析 [xml release]; } //创建标签 判断用 static NSString * kCity = @"city"; static NSString * kName = @"name"; static NSString * kLat = @"latitude_e6"; static NSString * kLon = @"longitude_e6"; static NSString * kCities = @"cities"; //开始解析 走节点前面的 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ // NSLog(@"%@",attributeDict); if ([elementName isEqualToString:kCity]) { _model = [[[CityModel alloc] init] autorelease];//初始化model [_cityArray addObject:_model]; //将每个model都存到数组中 } if ([elementName isEqualToString:kName]) { _currName = [attributeDict objectForKey:@"data"]; // NSLog(@"name ===== %@",_currName); } if ([elementName isEqualToString:kLat]) { _currLat = [attributeDict objectForKey:@"data"]; // NSLog(@"lat ===== %@",_currLat); } if ([elementName isEqualToString:kLon]) { _currLon = [attributeDict objectForKey:@"data"]; // NSLog(@"lon ===== %@",_currLon); } } //结束解析 走节点后面的 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ // NSLog(@"%@",elementName); if ([elementName isEqualToString:kName]) { _model.name = _currName; } if ([elementName isEqualToString:kLat]) { _model.latitude = _currLat; } if ([elementName isEqualToString:kLon]) { _model.longitude = _currLon; } if ([elementName isEqualToString:kCities]) { if ([self.delegate respondsToSelector:@selector(backModelArray:)]) { [self.delegate backModelArray:_cityArray]; //将这个数组回传到RootViewController } // NSLog(@"数组 === %@",_cityArray); // NSLog(@"%d",_cityArray.count); } } @end
相关文章推荐
- Ruby中的Proc类及Proc的类方法Proc.new的使用解析
- Oracle解析复杂json的方法
- [Python]从url中解析域名的几种方法
- 解析Exception和C#处理Exception的常用方法总结
- Java笔记4—2:解析Java中的精确计算方法3
- Python使用XPATH解析特定结构XML文件速度提升方法
- Java构造和解析Json数据的两种方法详解
- .NET下解析Json的方法
- 解决android某些应用开发某些类无法解析/找到的问题--使用android隐藏类的方法
- 利用反射解析方法
- dome4j 解析xml 文档 (对xml文档的 增 删 改 ) 方法
- 五种不同的 URL 参数解析方法的性能比较
- Android开发-Volley-解析Json使用方法-4-完整Demo-AndroidStudio
- XML的解析方法
- 浅谈四种XML文件生成与解析方法
- Android 更新UI方法的深度解析
- Integer的highestOneBit方法源码解析
- Jquery的text()和html()方法在li与div取值结果解析
- IOS中Json解析的四种方法
- 解析Android资源文件及他们的读取方法详解