//XMLTableViewController.h文件git
#import <UIKit/UIKit.h>api
#import "SecondTableViewController.h"數組
@interface XMLTableViewController : UITableViewController<NSXMLParserDelegate>網絡
//定義顯示在字典中的value值ide
@property (strong,nonatomic) NSString *str;atom
//定義全局數組用於顯示全部數據spa
@property (strong,nonatomic) NSMutableArray *array;代理
//定義字典用於封裝集合在的元素element
@property (strong,nonatomic) NSMutableDictionary *dic;文檔
@end
//XMLTableViewController.m文件
#import "XMLTableViewController.h"
@interface XMLTableViewController ()
@end
@implementation XMLTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
//tableView根視圖顏色
self.view.backgroundColor=[UIColor lightGrayColor];
//tableView標題
self.title=@"美團城市入住列表";
//tableView標題顏色
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor blueColor]}];
//網絡請求獲取文件
NSXMLParser *parser=[[NSXMLParser alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://www.meituan.com/api/v1/divisions"]];
//指定代理
parser.delegate=self;
//執行解析
[parser parse];
}
//開始文件解析
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
//第一次解析XML文件是,初始化集合
self.array=[NSMutableArray array];
}
//結束文件解析
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
}
//開始文件元素解析
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict
{
// 指定特殊節點元素進行操做
if ([elementName isEqualToString:@"division"]) {
// 只有在文檔中查找到division節點才初始化字典元素 dic
self.dic=[NSMutableDictionary dictionary];
}
}
//每一個節點的類容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
//每一個節點中的元素內容
self.str=string;
}
//結束文件元素解析
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName
{
// 只有節點元素是如下@「」內的字符串時才爲dic設置值
if ([elementName isEqualToString:@"id"]||[elementName isEqualToString:@"name"]||[elementName isEqualToString:@"timezone"]||[elementName isEqualToString:@"timezone_offset_gmt"]||[elementName isEqualToString:@"latitude"]||[elementName isEqualToString:@"longitude"]) {
[self.dic setObject:self.str forKey:elementName];
}
// 當節點是division時,將dic添加到集合中
// 即 集合中存儲了一個字典
else if ([elementName isEqualToString:@"division"]) {
[self.array addObject:self.dic];
}
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.array.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *iden=@"reuseIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:iden];
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:3 reuseIdentifier:iden];
}
//tableView的正標題
cell.textLabel.text=self.array[indexPath.row][@"name"];
//tableView的副標題
cell.detailTextLabel.text=self.array[indexPath.row][@"id"];
return cell;
}
//到下一頁
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SecondTableViewController *secView=[[SecondTableViewController alloc]init];
secView.strname=self.array[indexPath.row][@"name"];
secView.strid=self.array[indexPath.row][@"id"];
secView.strtime=self.array[indexPath.row][@"timezone"];
secView.strtimeget=self.array[indexPath.row][@"timezone_offset_gmt"];
secView.strlat=self.array[indexPath.row][@"latitude"];
secView.strlong=self.array[indexPath.row][@"longitude"];
[self.navigationController pushViewController:secView animated:YES];
}
// SecondTableViewController.h文件
#import <UIKit/UIKit.h>
@interface SecondTableViewController : UITableViewController
@property (strong,nonatomic) NSMutableArray *arr;
@property (strong,nonatomic) NSString *strid;
@property (strong,nonatomic) NSString *strname;
@property (strong,nonatomic) NSString *strtime;
@property (strong,nonatomic) NSString *strtimeget;
@property (strong,nonatomic) NSString *strlat;
@property (strong,nonatomic) NSString *strlong;
@end
// SecondTableViewController.m文件
#import "SecondTableViewController.h"
@interface SecondTableViewController ()
@end
@implementation SecondTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor lightGrayColor];
self.title=self.strname;
self.arr=[NSMutableArray array];
[self.arr addObject:self.strname];
[self.arr addObject:self.strid];
[self.arr addObject:self.strtime];
[self.arr addObject:self.strtimeget];
[self.arr addObject:self.strlat];
[self.arr addObject:self.strlong];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"reuseIdentifier"];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.arr.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier" forIndexPath:indexPath];
cell.textLabel.text=self.arr[indexPath.row];
return cell;
}