最近要做一个关于城市列表的选项,用到xml解析,了解了下,下面贴代码
从网上下了一个城市列表的模子,类似下面这样的
然后新建一个项目 名字就起XMLparse
@interface ViewController ()
{
NSMutableArray * province;//获取省份数组
NSMutableArray * citytype;//获取城市列表数组
NSMutableArray * city;//城市数组
NSMutableArray * areaname;//乡镇数组
NSMutableArray * postcode;//市级邮编数组
NSMutableArray * postcode1;//乡镇邮编
NSMutableString * tmpstring;//可变字符串临时保存数据用
UITextField * utf; //用于输入搜索条件
UITextField * utf1;//同上
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self load:@"result1"];//调用下面的方法,开始解析
[self showUI];
UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(shouhui)];
[self.view addGestureRecognizer:tap];//点击屏幕空白收回键盘。
}
-(void)shouhui{
[utf resignFirstResponder];
[utf1 resignFirstResponder];
}
-(BOOL)load:(NSString *)name
{
NSString * file=[[NSBundle mainBundle]pathForResource:name ofType:@"xml"];//取到xml文件
NSData * date=[NSData dataWithContentsOfFile:file];
//create xml parser
NSXMLParser *parser;
parser = [[NSXMLParser alloc] initWithData:date];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser setDelegate:self];//此处添加xml解析代理。注意代理方法必须要在下面写上
//开始解析
[parser parse];
return YES;
}
-(void)unload
{
}
//开始解析xml,此处对数组进行初始化
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
citytype=[[NSMutableArray alloc]init];
postcode=[[NSMutableArray alloc]init];
areaname=[[NSMutableArray alloc]init];
city=[[NSMutableArray alloc]init];
province=[[NSMutableArray alloc]init];
postcode1=[[NSMutableArray alloc]init];
}
- (void)parserDidEndDocument:(NSXMLParser *)parser//XML所有内容解析完成后调用此方法。
{
NSLog(@"解析完成");
}
//根据选定的内容进行解析。
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
//备注部分是城市列表部分
if ([elementName isEqualToString:@"province"]) {//此处elementname是元素名称,在xml中为<province>意思就是以此为总范围,选定其中的字典取值
NSLog(@"省份=%@", [attributeDict objectForKey:@"name"]);
[province addObject:[attributeDict objectForKey:@"name"]];
}
else if ([elementName isEqualToString:@"city"]) {//此处同上
NSLog(@"城市类型= %@ 邮编=%@ ", [attributeDict objectForKey:@"name"], [attributeDict objectForKey:@"postcode"]);
//取出来的城市类型(城市还是乡镇还是村)和邮编存到数组
[citytype addObject:[attributeDict objectForKey:@"name"]];
[postcode addObject:[attributeDict objectForKey:@"postcode"]];
}else if ([elementName isEqualToString:@"area"]){
NSLog(@"二级城市=%@ 邮编%@", [attributeDict objectForKey:@"name"],[attributeDict objectForKey:@"postcode"]);
[areaname addObject:[attributeDict objectForKey:@"name"]];
[postcode1 addObject:[attributeDict objectForKey:@"postcode"]];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// NSLog(@"=======end element:%@=========", elementName);
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
// NSLog(@"=======element content=%@=====", string);
}
#pragma mark 搜索部分
-(void)showUI{
utf=[[UITextField alloc]init];
utf.placeholder=@"银行名,如:工商或招商或信用社";
utf.backgroundColor=[UIColor lightGrayColor];
utf.frame=CGRectMake(100, 100, 200, 100);
[self.view addSubview:utf];
utf1=[[UITextField alloc]init];
utf1.placeholder=@"城市或城镇名";
utf1.backgroundColor=[UIColor yellowColor];
utf1.frame=CGRectMake(100, 300, 200, 100);
[self.view addSubview:utf1];
UIButton * btn=[UIButton buttonWithType:UIButtonTypeCustom];
btn.backgroundColor=[UIColor greenColor];
[btn setTitle:@"查询" forState:UIControlStateNormal];
btn.frame=CGRectMake(100, 450, 100, 100);
[btn addTarget:self action:@selector(chaxun:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
//查询按钮点击后开始查询 根据包含词汇查询
-(void)chaxun:(UIButton *)sender{
for (NSString * name in city) {
if ([name containsString:utf.text]) {
if ([name containsString:utf1.text]) {
NSLog(@"%@",name);
}
}
}
}
因为放的是城市xml 为了让搜索效果更明晰,又放了一张银行xml,这样搜索的结果可以更清楚明白。只要在viewdidload方法中改写【self load:@“”】中的xml的文件名字即可