如何使用NSXMLParser解析网站中的数据

如何使用NSXMLParser解析网站中的数据

问题描述:

我想根据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]; 
     } 
    } 
} 

最后我得到了它。我所做的是我采取了两个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); 

     } 
    } 
} 

如果直接从网站更可能阅读你得到“无效”字符。只要解析器看到这些无效字符,它就会崩溃。我会建议看看使用“HPPLE解析器”。如果无效字符进来它的效果要好得多,并不会崩溃

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

+0

好的,但是在做完这个之后,..应该追加到索引path.row中以获取数据到tableview单元格中...... Plz澄清它,.. @ Louie – Madhu