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 ...
随机推荐
- SQL 必知必会·笔记<16>使用视图
1.视图 视图是虚拟的表.与包含数据的表不一样,视图只包含使用时动态检索数据的查询. 为什么使用视图 重用SQL 语句 简化复杂的SQL 操作.在编写查询后,可以方便地重用它而不必知道其基本查询细节 ...
- TensorFlow中数据读取之tfrecords
关于Tensorflow读取数据,官网给出了三种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据. 从文件读取数据: 在TensorFlow ...
- Python 【web框架】之Flask
flask 是Python实现的轻量级web框架.没有表单,orm等,但扩展性很好.很多Python web开发者十分喜欢.本篇介绍flask的简单使用及其扩展. 文中示例源码已经传到github:h ...
- Maven教程(2)--Maven的配置,MyEclipse与Eclipse的配置
1.修改Maven的 repository的路径 2.找到mirrors 使用阿里云镜像 <mirror> <id>alimaven</id> <name&g ...
- React native 环境搭建遇到问题解决(android)
新建项目 react-native init TestApp 运行项目 react-native run-android 不好意思,错误马上就到了 问题一 通常遇到这个错误之后,系统会给出这个具体详情 ...
- 再会Java
作者曾写过一段时间Java, 时间一长也就忘得差不多了. 现在重新学习一个, 故而只是提要式的记录. Java是静态强类型语言, 运行于Java虚拟机(Java Virtual Machine, JV ...
- 学Java的第17天。呃。。。今天有点奇葩
神奇的老师在网上看到狗跳楼的视频然后就想到抛物线问题: 还是 属性和方法的调用: package sklx; public class Dog{ private float v = 30.0f; pr ...
- Matlab 如何输入矩阵
A=[1 2 3;4 5 6;7 8 9],每行之间用分号隔开 也可以用循环控制输入 n=input('请输入矩阵阶数:') for i=1:n for j=1:n a(i,j ...
- webpack4 系列教程(三): 多页面解决方案--提取公共代码
这节课讲解webpack4打包多页面应用过程中的提取公共代码部分.相比于webpack3,4.0版本用optimization.splitChunks配置替换了3.0版本的CommonsChunkPl ...
- Java集合之LinkedList源码分析
概述 LinkedLIst和ArrayLIst一样, 都实现了List接口, 但其内部的数据结构不同, LinkedList是基于链表实现的(从名字也能看出来), 随机访问效率要比ArrayList差 ...