NSXMLParser(SAX解析)大文件解析
NSXMLParser(SAX解析)大文件解析
- (void)viewDidLoad
{
[
{
[super
viewDidLoad];
// 1.創建URL
NSURL *url =
HMUrl(@"video?type=XML");
// 2.創建請求
NSURLRequest *request = [NSURLRequest
requestWithURL:url];
// 3.發送請求
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]
completionHandler:^(NSURLResponse
*response,
NSData *data,
NSError *connectionError) {
if (connectionError || data ==
nil) {
[MBProgressHUD
showError:@"網絡繁忙,請稍後再試!"];
return;
}
//
解析XML數據
// 1.創建XML解析器
-- SAX --
逐個元素往下解析
NSXMLParser *parser = [[NSXMLParser
alloc]
initWithData:data];
// 2.設置代理
parser.delegate
=
self;
// 3.開始解析(同步執行)
[parser
parse];
// 4.刷新表格
[self.tableView
reloadData];
}];
}
#pragma mark - NSXMLParser的代理方法
/**
*
解析到文檔的開頭時會調用
*/
- (void)parserDidStartDocument:(NSXMLParser
*)parser
{
// NSLog(@"parserDidStartDocument----");
}
/**
*
解析到一個元素的開始就會調用
*
*
@param
elementName
元素名稱
*
@param
attributeDict
屬性字典
*/
- (void)parser:(NSXMLParser
*)parser didStartElement:(NSString
*)elementName namespaceURI:(NSString
*)namespaceURI qualifiedName:(NSString
*)qName attributes:(NSDictionary
*)attributeDict
{
if ([@"videos"
isEqualToString:elementName])
return;
HMVideo *video = [HMVideo
videoWithDict:attributeDict];
[self.videos
addObject:video];
}
/**
*
解析到一個元素的結束就會調用
*
*
@param
elementName
元素名稱
*/
- (void)parser:(NSXMLParser
*)parser didEndElement:(NSString
*)elementName namespaceURI:(NSString
*)namespaceURI qualifiedName:(NSString
*)qName
{
// NSLog(@"didEndElement----%@", elementName);
}
/**
*
解析到文檔的結尾時會調用(解析結束)
*/
- (void)parserDidEndDocument:(NSXMLParser
*)parser
{
// NSLog(@"parserDidEndDocument----");
}