zoukankan      html  css  js  c++  java
  • 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、有什么疑问欢迎评论提问。

  • 相关阅读:
    TDiocpTcpServer socket哈希表
    TCrossSocket
    TDiocpCoderTcpServer和TDiocpTcpServer的关系和区别
    TDiocpTcpServer数据包大小
    cross socket tcp数据包最大长度
    在DLL中使用DevExpress
    cross socket tcp client demo
    nginx-proxy docker 的nginx自动服务发现方案
    golang used for two different module paths 问题解决
    grafana dashboard 分享的几种处理方法
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4676541.html
Copyright © 2011-2022 走看看