如何使用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/
好的,但是在做完这个之后,..应该追加到索引path.row中以获取数据到tableview单元格中...... Plz澄清它,.. @ Louie – Madhu