2011-11-03 64 views
1

我想根據xml格式的標題和鏈接從網站獲取更新。如何使用NSXMLParser解析網站中的數據

我嘗試了下面的代碼,但它不工作。在控制檯它顯示消息:

2011-11-03 14:45:05.987的TabBar [673:E903] *終止應用程序由於 未捕獲的異常 'NSInvalidArgumentException',原因:「 - [NSCFString isEqualtostring:]:無法識別的選擇發送到實例0x5746830'

如果我再次運行,表視圖加載,但沒有在表格單元格中的數據。

它顯示在該行if ([elementName isEqualtostring:@"item"])此消息:

程序接收到的信號SIGABRT

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    classelement = elementName; 
    if ([elementName isEqualtostring:@"item"]) 
    { 
     itemselected = YES; 
     multitle = [[NSMutableString alloc]init]; 
     mullink = [[NSMutableString alloc]init]; 
    } 
} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedname:(NSString *)qName 
{ 
    if ([elementName isEqualToString:@"item"]) 
    { 
     itemselected = NO; 
     [titlearray addObject:multitle]; 
     [linkarray addObject:mullink]; 
     [multitle release]; 
     [mullink release]; 

     [self.tbl reloadData]; 
    } 
} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if (itemselected) 
    { 
     if ([classelement isEqualToString:@"title"]) 
     { 
      NSLog(@"%@",string); 
      [multitle appendString:multitle]; 
     } 
     else if([classelement isEqualToString:@"link"]) 
     { 
      [multitle appendString:string]; 
     } 
    } 
} 

回答

0

最後我得到了它。我所做的是我採取了兩個NSMutableArray s和兩個NSMutableString s,並且我將這些項目附加到字符串,然後將這些字符串附加到這兩個數組中。

(void)viewDidLoad 
{ 

    titlearray = [[NSMutableArray alloc]init]; 
    linkarray = [[NSMutableArray alloc]init]; 

    NSString *rssaddress [email protected]"http://www.greenday.com/rss"; 
    NSURL *url = [NSURL URLWithString:rssaddress]; 
    xmlparser = [[NSXMLParser alloc]initWithContentsOfURL:url]; 
    [xmlparser setDelegate:self]; 
    [xmlparser parse]; 


    [super viewDidLoad]; 
} 

(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 

    classelement = elementName; 



    if([elementName isEqualToString:@"item" ]) 
    { 
     itemselected = YES; 
     titlestrng = [[NSMutableString alloc]init]; 
     linkstrng = [[NSMutableString alloc]init]; 

    } 

} 

(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 

    if([elementName isEqualToString:@"item" ]) 
    { 
     itemselected = NO; 
     [titlearray addObject:titlestrng]; 
     [linkarray addObject:linkstrng]; 


     [titlestrng release]; 
     [linkstrng release]; 


     [self.tb reloadData]; 
    } 
} 


(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 

    if(itemselected) 
    { 
     if([classelement isEqualToString:@"title"]) 
     { 
      [titlestrng appendString: string]; 
        NSLog(@"%@",titlestrng); 
     } 

     else if ([classelement isEqualToString:@"link"]) 
     { 
      [linkstrng appendString:string]; 
      NSLog(@"%@",linkstrng); 

     } 
    } 
} 
0

如果直接從網站更可能閱讀你得到「無效」字符。只要解析器看到這些無效字符,它就會崩潰。我會建議看看使用「HPPLE解析器」。如果無效字符進來它的效果要好得多,並不會崩潰

Hpple信息在這裏:http://blog.objectgraph.com/index.php/2010/02/24/parsing-html-iphone-development/

+0

好的,但是在做完這個之後,..應該追加到索引path.row中以獲取數據到tableview單元格中...... Plz澄清它,.. @ Louie – Madhu