从雅虎rss feed解析媒体内容源xcode 4.5 ios
问题描述:
我试图获取包含在雅虎RSS feed的media:content标签中的url。对于didStartElement(),foundCharacters()和didEndElement()的代码如下:从雅虎rss feed解析媒体内容源xcode 4.5 ios
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:kChannelElementName]) {
Channel = [[channel alloc] init];
dict=[[NSMutableDictionary alloc] init];
[Channel setItemCollectionArray:[[NSMutableArray alloc] init]];
return ;
}
if ([elementName isEqualToString:kItemElementName]) {
itemCollection=[[ItemDataCollection alloc] init];
return ;
}
if ([elementName isEqualToString:kTitleElementName]) {
return ;
}
if([elementName isEqualToString:kItemDescription]){
return ;
}
if ([elementName isEqualToString:kItemImage]) {
NSString *urlString = attributeDict[@"url"];
if(urlString){
[dict setObject:urlString forKey:@"img"];
}
return ;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (currentElementData == nil) {
self.currentElementData = [[NSMutableString alloc] init];
}
[currentElementData appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:kChannelElementName]) {
[channelCollection addObject:Channel];
NSLog(@"channel are***********%@",channelCollection);
for(ItemDataCollection *mydata in Channel.itemCollectionArray){
NSLog(@"___%@ <><><><><> desc \n %@ <><><><><><> img \n %@",mydata.title,mydata.itemDescription,mydata.titleImage);
}
Channel =nil;
}
else if ([elementName isEqualToString:kItemElementName]) {
[[Channel itemCollectionArray] addObject:itemCollection];
itemCollection=nil;
}
else if ([elementName isEqualToString:kTitleElementName]) {
if(itemCollection==nil){
Channel.title=currentElementData;
}
else{
itemCollection.title=currentElementData;
}
}
else if ([elementName isEqualToString:kPubDate]) {
Channel.pubDate=currentElementData;
}
else if ([elementName isEqualToString: kItemDescription]) {
if(itemCollection!=nil){
itemCollection.itemDescription=currentElementData;
}
}
else if([elementName isEqualToString:@"media:content"]){
if(itemCollection!=nil){
itemCollection.titleImage = currentElementData;
}
}
// [currentElementData release];
self.currentElementData = nil;
}
我打印所分析的数据日志。图像显示为空。其他一切,例如:标题和说明正在得到适当的。我该如何解决它?可能需要在didEndElement方法中完成某些操作。但我不知道是什么。自昨天以来,我一直在绞尽脑汁。请帮忙!!
我做出didStartElement()的一些变化:)
if ([elementName isEqualToString:kItemImage]) {
NSString *urlString = attributeDict[@"url"];
if(urlString){
[dict setObject:urlString forKey:@"img"];
NSLog(@"%@",urlString);
mString = [NSString stringWithFormat:urlString];
和didEndElement(一些变化:
else if([currentElementData rangeOfString:@"media:content"].location){
if(itemCollection!=nil){
// [currentElementData appendString:dict];
itemCollection.titleImage = mString;
}
}
mString已被宣布为一个可变的字符串。图像现在得到解析。他们的网址正在日志中显示。现在的问题是,最后一张图片重复两次。这可能是因为最后一个Feed没有图片,所以它使用的是前一张。如何解决这个问题?我的意思是,可以有多个没有图像的提要。在这种情况下,它实际上应该显示null而不是之前图像的URL。
答
我不`吨以及了解雅虎RSS饲料,但我希望它会帮助你.....
只是试训的这....
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
currentElement = [elementName copy];
if ([elementName isEqualToString:@"item"]) {
item = [[NSMutableDictionary alloc] init];
currentTitle = [[NSMutableString alloc] init];
currentDate = [[NSMutableString alloc] init];
currentSummary = [[NSMutableString alloc] init];
currentLink = [[NSMutableString alloc] init];
currentImage = [[NSMutableString alloc] init];
}
else if([elementName isEqualToString:@"media:content"]) {
currentImage = [attributeDict objectForKey:@"img src"];
NSLog(@"Url:%@", currentImage);
}
}
}