//
// 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
XML解析 适合大文件
最新推荐文章于 2024-06-29 12:06:41 发布