从雅虎rss feed解析媒体内容源xcode 4.5 ios

从雅虎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); 
    } 
} 
}