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----");
}
發佈了82 篇原創文章 · 獲贊 13 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章