iOS解析XML实现省市区选择
1、具体内容就不再赘述了。直接看关键代码。
viewController.h
//
// ViewController.h
// ParseXmlToRealizeChooseCityDemo
//
// Created by zhanggui on 15/7/25.
// Copyright (c) 2015年 zhanggui. All rights reserved.
// #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UIPickerViewDataSource,UIPickerViewDelegate,NSXMLParserDelegate> - (IBAction)getAction:(UIButton *)sender; @property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@end
viewController.m
//
// ViewController.m
// ParseXmlToRealizeChooseCityDemo
//
// Created by zhanggui on 15/7/25.
// Copyright (c) 2015年 zhanggui. All rights reserved.
// #import "ViewController.h" @interface ViewController ()
{
NSMutableDictionary *province,*city;
NSMutableArray *provinceArr,*cityArr,*areaArr;
NSString *tempProvince,*tempCity,*tempArea; NSArray *finalProvinceArr,*finalCityArr,*finalAreaArr; NSString *seletedStr;
} @end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad]; NSString *xmlFilePath = [[NSBundle mainBundle]pathForResource:@"province_data" ofType:@"xml"];
NSData *data = [NSData dataWithContentsOfFile:xmlFilePath];
NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:data];
xmlParser.delegate = self;
province = [NSMutableDictionary new];
city = [NSMutableDictionary new];
provinceArr = [NSMutableArray new];
cityArr = [NSMutableArray new];
[xmlParser parse]; finalProvinceArr = [province allKeys]; NSDictionary *tempCityDic = [province objectForKey:[finalProvinceArr objectAtIndex:0]];
finalCityArr = [tempCityDic allKeys]; finalAreaArr = [tempCityDic objectForKey:[finalCityArr objectAtIndex:0]];
}
#pragma mark - xmlParseDelegateMethod
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"province"]) {
tempProvince = [attributeDict objectForKey:@"name"];
}
if ([elementName isEqualToString:@"city"]) {
tempCity = [attributeDict objectForKey:@"name"];
areaArr = [NSMutableArray new];
}else if ([elementName isEqualToString:@"district"]) {
[areaArr addObject:[attributeDict objectForKey:@"name"]];
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"city"]) {
NSMutableArray *temp =[[NSMutableArray alloc] initWithArray:areaArr] ;
[city setValue:temp forKey:tempCity];
[areaArr removeAllObjects];
}else if ([elementName isEqualToString:@"province"]) {
NSDictionary *tempDic = [[NSDictionary alloc] initWithDictionary:city];
[province setValue:tempDic forKey:tempProvince];
[city removeAllObjects]; }
} #pragma mark - UIPickerViewDeletate
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 3;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
if(component==0) {
return [finalProvinceArr count];
}else if (component==1) {
return [finalCityArr count];
}else {
return [finalAreaArr count];
}
} -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
if (component==0) {
return finalProvinceArr[row];
}else if (component==1) {
return finalCityArr[row];
}else
{
return finalAreaArr[row];
}
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if (component==0) {
finalCityArr =[[province objectForKey:[finalProvinceArr objectAtIndex:row]] allKeys];
[pickerView selectRow:0 inComponent:1 animated:NO];
[pickerView reloadComponent:1]; if ([finalCityArr count]!=0) {
NSString *selectedProvince = [self pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:0] forComponent:0];
NSString *selectedCity = [self pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:1] forComponent:1];
finalAreaArr = [[province objectForKey:selectedProvince] objectForKey:selectedCity];
[pickerView selectRow:0 inComponent:2 animated:NO];
[pickerView reloadComponent:2];
}
}else if (component==1) {
NSString *selectedProvince = [self pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:0] forComponent:0];
NSString *selectedCity = [self pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:1] forComponent:1];
finalAreaArr = [[province objectForKey:selectedProvince] objectForKey:selectedCity] ;
[pickerView selectRow:0 inComponent:2 animated:NO];
[pickerView reloadComponent:2];
// finalAreaArr = [province objectForKey:[province objectForKey:<#(id)#>]];
}
NSString *pro =[self pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:0] forComponent:0];
NSString *cit =[self pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:1] forComponent:1];
NSString *are = [self pickerView:pickerView titleForRow:[pickerView selectedRowInComponent:2] forComponent:2];
seletedStr =[NSString stringWithFormat:@"%@%@%@",pro,cit,are];
}
#pragma mark - UIButton Method
- (IBAction)getAction:(UIButton *)sender {
UIAlertView *aler = [[UIAlertView alloc] initWithTitle:@"选中结果" message:seletedStr delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
[aler show];
}
@end
2、province_data.xml文件下载地址:http://pan.baidu.com/s/1c0Cr9ja
3、源码下载地址:https://github.com/ScottZg/GetProvinceCityAreaByXMLFile
4、有什么疑问欢迎评论提问。
iOS解析XML实现省市区选择的更多相关文章
- IOS 解析XML文档
前段时间想找点事做,就是试着看能不能用豆瓣的API做点什么,于是就碰到了这个问题——XML解析. 老师还没讲,只能自己去查. XML文档解析主要有SAX和DOM两种模式,IOS上两种模式都可以用,这里 ...
- IOS解析XML
XML也许是我们储存数据和通讯数据中最常见的一种简易方式,当我们来到XML的海洋时,我们会发现当我们用iPhone程序解析XML时,我们是有如此多的选项,让人眼花缭乱.iOS SDK本身就带有两种不同 ...
- IOS 解析XML数据
● 什么是XML ● 全称是Extensible Markup Language,译作“可扩展标记语言” ● 跟JSON一样,也是常用的一种用于交互的数据格式 ● 一般也叫XML文档(XML ...
- iOS解析XML数据
iOS中解析XML数据的类是 NSXMLParser,详细使用方法如下: 假设现在在内存中有XML的二进制数据对象(NSData):data(该数据可能来自网络,也可能是本地的文件数据),设置NSX ...
- ios解析XML和json数据
解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数 ...
- IOS解析XML文件
这里使用NSXMLParser来解析,这个是apple自带的xml解析库,有个參考文章:http://www.raywenderlich.com/553/xml-tutorial-for-ios-ho ...
- iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)
一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...
- iOS平台XML解析类库对比和安装说明
在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...
- [iOS 多线程 & 网络 - 2.3] - 解析xml
A.XML基本知识 1.xml概念 什么是XML全称是Extensible Markup Language,译作“可扩展标记语言”跟JSON一样,也是常用的一种用于交互的数据格式一般也叫XML文档(X ...
随机推荐
- 从零开始学 Web 之 DOM(三)innerText与innerHTML、自定义属性
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...
- Zuul过滤器
1.Zuul过滤器生命周期Zuul大部分功能都是通过过滤器来实现的,Zuul定义了4种标准的过滤器类型,这些过滤器类型对应于请求的典型生命周期.a.pre: 这种过滤器在请求被路由之前调用.可利用这种 ...
- MySQL分布式jdbc连接
参考文档: https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-multi-host-connections.html 服务器故障转移 连 ...
- redis linux(centos) 安装
前言 redis 大家都使用过, 可以安装在windows下, 也可以安装在linux下, 一般还是linux下安装比较多. 这里来介绍一下redis在linux下的安装 一. 下载 https:// ...
- JDK源码分析之hashmap就这么简单理解
一.HashMap概述 HashMap是基于哈希表的Map接口实现,此实现提供所有可选的映射操作,并允许使用null值和null键.HashMap与HashTable的作用大致相同,但是它不是线程安全 ...
- bootstrap3中container与container_fluid的区别
.container与.container_fluid是bootstrap中的两种不同类型的外层容器,按照官方的说法,这两者的区别是: .container 类用于固定宽度并支持响应式布局的容器. . ...
- MySQL中表名重命名
第一种办法:##修改表名, TO 或AS都可以,也以省略掉 ## ALTER TABLE 表名 RENAME [TO|AS] 新表名 ALTER TABLE user10 RENAME TO user ...
- java Future用法和意义一句话击破
在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果. 所以run的返回值是void类型. 如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使 ...
- jquery全选或不全选时,不操作已经禁用的checkbox
$("#selectAll").click(function(){ if(this.checked ){ $(":checkbox[name='equid']" ...
- Nginx学习笔记(二)--- 配置虚拟主机
Linux下安装Nginx https://www.cnblogs.com/dddyyy/p/9780705.html 1.虚拟主机介绍 一台服务器分成多个"独立"的主机,每台虚 ...