iOS解析XML实现省市区选择

1、具体内容就不再赘述了。直接看关键代码。

viewController.h


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

//

//  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, nonatomicIBOutlet UIPickerView *pickerView;

@end

  viewController.m


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

//

//  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、有什么疑问欢迎评论提问。

时间: 2024-10-31 14:45:28

iOS解析XML实现省市区选择的相关文章

iOS开发中常见的解析XML的类库以及简要安装方法_IOS

在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.TinyXML和GDataXML.问题是应该选择哪一个呢? 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意XML节点,读取它的属性和值.而且通常情况下,可以借助XPath,直接查询XML节点. SAX

使用Swift实现iOS App中解析XML格式数据的教程_Swift

在IOS中,提供了一套解析XML数据的API.其实也很简单,就是NSXMLParser和NSXMLParserDelegate. 可以直接指定到XML的URL去实例化NSXMLParser 复制代码 代码如下: public convenience init?(contentsOfURL url: NSURL) 解析文件,返回的是一次解析的结果 复制代码 代码如下: NSXMLParser.parse() -> Bool 监听解析节点的属性 复制代码 代码如下: NSXMLParserDeleg

javascript解析xml实现省市县三级联动的方法_javascript技巧

本文实例讲述了javascript解析xml实现省市县三级联动的方法.分享给大家供大家参考.具体实现方法如下: (该方法适用于任何常用浏览器) <body> <div> <span> <select id="sheng" style="width: 100px"></select> </span> <span> <select id="shi" style=

用PHP工具包expat解析XML

xml 如今人人鼓吹XML是Web开发者最好的朋友,有了XML的帮忙,后者即可轻松地格式化和显示来自几乎任何数据源的数据.但是,对动态内容而言,格式优良的数据却还远远谈不上达到理想状态.大多数的Web开发者都会告诉你,今天的网络上没有动态内容怎么能行!问题是:"到底该如何用XML创建动态内容呢?" 答案是用动态内容处理语言来解析XML,比如用PHP或者Perl等,从理论上说,这类程序语言是可以出于各种目的利用XML的.无非是采用一些能解析XML的工具包而已.James Clark就提供

PHP使用xpath解析XML实例教程

XML文件在PHP网站开发的轻量级应用中使用非常广泛,而PHP解析和读取XML文件的方式有很多种,比如JS DOM.SimpleXml.Xpath等方式解析XML文件,今天来讲讲在PHP中使用Xpath解析XML的实例,同时通过Xpath解析XML的实例来介绍部分基础的Xpath语法. Xpath是什么? Xapth主要用来在XML文档中查询信息的工具,通过使用路径表达式可以解析XML文件,读取XML文件中的数据. PHP解析XML推荐教程 PHP4和PHP5版本下解析XML文档的操作方法 需要

magento -- 修正又一个翻译上的bug,同时了解了下Magento解析xml的方式

Magento在翻译上的bug可谓多入牛毛,有些地方你会发现无论你如何在CSV文件里配置翻译项,英文的依然是英文.Magento是用helper类的魔术方法来做多语言的处理,比如 Mage::helper('adminhtml')->__('-- Please select --')    而无法翻译的地方大多数就是因为需要翻得词没有用Mage::helper('XXX')->__()来做处理,或者说Magento官方遗漏了.对于非英语国家来说,想要完整的翻译完Magento就得把这些地方都给

Android 创建与解析XML(一)—— 概述

Android 是最常用的智能手机平台,XML 是数据交换的标准媒介,Android 中可以使用标准的XML生成器.解析器.转换器 API,对 XML 进行解析和转换. XML,相关有DOM.SAX.JDOM.DOM4J.Xerces.JAXP等一堆概念,但是很多人总是会弄混他们之间的关系,这对我们理解XML文件的创建和解析很不利.要挑选一个适合在Android平台上使用的XML解析方案,我们还是得先把这些概念厘清. XML基本概念 DOM(Document Object Model,文档对象模

四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

原文链接 作者:Alexia(minmin) 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX:http://sourceforge.net/projects/sax/ JDOM:http://jdom.org/downloads/index.html DOM4J:http://sourceforge.net/proj

Dom4j解析xml文件

时间:2003.12.15   版权声明: 本文由冰云完成,首发于CSDN,未经许可,不得使用于任何商业用途. 文中代码部分引用自DOM4J文档. 欢迎转载,但请保持文章及版权声明完整. 如需联络请发邮件:icecloud(AT)sina.com       DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义: Dom4j is an easy to use, open source library for working with XML, XPath and XSL