XML解析 适合大文件
2015-10-18 21:42
381 查看
// // ViewController.m // 备课代码03-XML解析 // // Created by LTOVE on 15/10/18. // Copyright (c) 2015年 LTOVE. All rights reserved. // #import "ViewController.h" #import "ViewController.h" #import "UIImageView+WebCache.h" #import "VideoCell.h" #import "Video.h" @interface ViewController () <NSXMLParserDelegate> @property (nonatomic, strong) NSArray *dataList; // MARK:- XML解析相关属性 @property (nonatomic, strong) NSMutableArray *videos; @property (nonatomic, strong) Video *currentVideo; @property (nonatomic, strong) NSMutableString *elementString; @end @implementation ViewController - (void)setDataList:(NSArray *)dataList { _dataList = dataList; [self.tableView reloadData]; [self.refreshControl endRefreshing]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataList.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *ID = (indexPath.row % 2) ? @"Cell2" : @"Cell"; VideoCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; cell.video = self.dataList[indexPath.row]; return cell; } - (void)viewDidLoad { [super viewDidLoad]; [self loadData]; } // MARK: - 加载XML数据 - (IBAction)loadData { NSString *urlString = @"http://localhost/videos.xml"; urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlString]; NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:10.0]; [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; parser.delegate = self; [parser parse]; }]; } #pragma mark - XML解析属性懒加载 - (NSMutableArray *)videos { if (_videos == nil) { _videos = [NSMutableArray array]; } return _videos; } - (NSMutableString *)elementString { if (_elementString == nil) { _elementString = [NSMutableString string]; } return _elementString; } #pragma mark - NSXMLParserDelegate // 1. 开始文档 - (void)parserDidStartDocument:(NSXMLParser *)parser { NSLog(@"1. 开始文档"); [self.videos removeAllObjects]; } // 2. 开始节点 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { NSLog(@"2. 开始节点 %@ %@", elementName, attributeDict); if ([elementName isEqualToString:@"video"]) { self.currentVideo = [[Video alloc] init]; self.currentVideo.videoId = attributeDict[@"videoId"]; } [self.elementString setString:@""]; } // 3. 发现节点文字 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { NSLog(@"===> %@", string); [self.elementString appendString:string]; } // 4. 结束节点 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { NSLog(@"4. 结束节点 %@", elementName); if ([elementName isEqualToString:@"video"]) { [self.videos addObject:self.currentVideo]; } else if (![elementName isEqualToString:@"videos"]) { [self.currentVideo setValue:self.elementString forKey:elementName]; } } // 5. 结束文档 - (void)parserDidEndDocument:(NSXMLParser *)parser { NSLog(@"5. 结束文档 %@ %@", self.videos, [NSThread currentThread]); dispatch_async(dispatch_get_main_queue(), ^ {self.dataList = self.videos;}); } // 6. 解析错误 - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { NSLog(@"6. 解析错误 %@", parseError); } @end
相关文章推荐
- CSS3之选择器
- 关于web性能的思考与分享[02]——静态资源
- server2008设置安全策略->使用简单密码
- Android自动化测试(UiAutomator)简要介绍
- 大学期间项目笔记
- 第一个C语言代码分析
- 软件缺陷的重要性和优先级
- spring @order
- 【自考总结】第三站的风景
- hadoop介绍
- C++中结构体与类的区别(struct与class的区别)
- hbase meta表修复
- Oracle 11g 服务端、客户端的安装配置
- 黑马程序员——Blocks
- 读书--C和指针
- LeetCode 001, Two Sum
- VS2010 简单ATL COM开发(下)
- 搭建Android UI Testing自动化测试开发环境
- 原型模式之深浅复制
- VS2010 简单ATL COM开发(上)