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实现省市区选择的更多相关文章

  1. IOS 解析XML文档

    前段时间想找点事做,就是试着看能不能用豆瓣的API做点什么,于是就碰到了这个问题——XML解析. 老师还没讲,只能自己去查. XML文档解析主要有SAX和DOM两种模式,IOS上两种模式都可以用,这里 ...

  2. IOS解析XML

    XML也许是我们储存数据和通讯数据中最常见的一种简易方式,当我们来到XML的海洋时,我们会发现当我们用iPhone程序解析XML时,我们是有如此多的选项,让人眼花缭乱.iOS SDK本身就带有两种不同 ...

  3. IOS 解析XML数据

    ●  什么是XML ●  全称是Extensible Markup Language,译作“可扩展标记语言” ●  跟JSON一样,也是常用的一种用于交互的数据格式 ●  一般也叫XML文档(XML ...

  4. iOS解析XML数据

    iOS中解析XML数据的类是  NSXMLParser,详细使用方法如下: 假设现在在内存中有XML的二进制数据对象(NSData):data(该数据可能来自网络,也可能是本地的文件数据),设置NSX ...

  5. ios解析XML和json数据

    解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数 ...

  6. IOS解析XML文件

    这里使用NSXMLParser来解析,这个是apple自带的xml解析库,有个參考文章:http://www.raywenderlich.com/553/xml-tutorial-for-ios-ho ...

  7. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

  8. iOS平台XML解析类库对比和安装说明

    在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...

  9. [iOS 多线程 & 网络 - 2.3] - 解析xml

    A.XML基本知识 1.xml概念 什么是XML全称是Extensible Markup Language,译作“可扩展标记语言”跟JSON一样,也是常用的一种用于交互的数据格式一般也叫XML文档(X ...

随机推荐

  1. centos7环境开启WIFI热点

    1.环境介绍 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@localhost ~]# u ...

  2. windows环境下pycharm如何设置Linux编码

    最近写代码一直在windows环境下,写完之后再传到Linux端就会出现代码格式错乱. 解决办法: 在windows端的pycharm代码格式设置为unix and os及可以解决这个问题. 如果你要 ...

  3. JavaScript实现iphone时钟

    看效果(欢迎各位同学推荐更好的gif制作软件) 请看代码 <!DOCTYPE html> <html lang="en"> <head> < ...

  4. 模拟HTTP协议接收请求并返回信息

    private string HttpPost(string Url, string postDataStr) { HttpWebRequest request = (HttpWebRequest)W ...

  5. VS2017进程为idXXXX 无法启动解决方案

    1.对无法启动项目的 .csproj 后缀文件用记事本打开 找到<WebProjectProperties>xx</WebProjectProperties> 删掉 让后 重新 ...

  6. asp.net通过后台代码给前台设置css样式,下拉列表在js中的取值

    后台根据不同的用户登陆隐藏或显示前台div标签 前台: 将div声明成服务器端控件 <div id="div1" runat="server">.. ...

  7. mui 实用封装销毁页面

    /* * 描述:页面销毁封装 * 说明:针对订单特殊定位页面 * 返回首页,页面空白前进行销毁页面处理 * 使用:plusReady之后 */ (function(w) { var destructi ...

  8. Eclipse快捷键 10个最有用的快捷键(转载收藏)

    原文连接:https://www.cnblogs.com/iamfy/archive/2012/07/11/2586869.html Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级 ...

  9. 通过swagger将API业务版本号与Gitlab代码版本号绑定

    1.调用Gitlab API获取项目commit ID 2.编辑 Swagger2.java @Configuration @EnableSwagger2 @EnableWebMvc public c ...

  10. SQL Server 基本UPDATE和DELETE语句

    1.UPDATA 基本UPDATE语法:(可以修改多行的列) 2.DELETE