如何从RSS到单元格获取图像

时间:2013-02-26 16:43:48

标签: ios uitableview uilabel

我正在努力解决我的问题,我希望有人可以帮助我。我有一个带有格式化数据的RSS源。 e.g。

<description>
    <![CDATA[
     <p> ... <a href="https://www.google.com/">Klick here</a>.</p>
    ]]>
</description>
<content:encoded>
    <![CDATA[<p> ... <a href="https://www.google.com/">Klick here</a>.</p> <img src="http://image_url.jpg" alt="" title="some text" width="622" height="466" class="size-full wp-image-117" />
    ]]>
</content:encoded>

是否有可能将格式应用于标签?或者更好的情况下WebView? 我该怎么做才能显示整个RSS源?

为了更好地理解我的代码:Here是我在项目中实现的来源。

1 个答案:

答案 0 :(得分:3)

在RSS阅读器中,在一个用户界面中通常有两个级别,您必须考虑如何处理此问题。主视图和详细信息视图。我们将一次解决这些问题:

主视图

在主视图中,您正在查看Feed中的项目列表。在这种情况下,大多数RSS阅读器将只显示项目的纯文本标题,也可能只显示与该项目相关联的图像。这里的问题是检索图像URL的位置。 (据我所知)这里有三个选项:

  1. url元素的media:content属性。有关示例,请参阅http://news.yahoo.com/rss/

  2. url元素中的image元素。有关示例,请参阅http://www.dpreview.com/feeds/news.xml

  3. imgdescription元素中解析HTML content:encoded标记。您可以通过另一个解析器运行HTML(但遗憾的是,NSXMLParser在解析HTML时不是很健壮,因此您可能需要追求Hpple之类的东西)或者只是使用正则表达式从HTML中获取图像URL:

    - (NSArray *)imgSrcAttributesInString:(NSString *)string
    {
        NSError *error = NULL;
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"](.*?)['\"][\\s\\S]*?>"
                                                                               options:NSRegularExpressionCaseInsensitive
                                                                                 error:&error];
    
        NSMutableArray *results = [NSMutableArray array];
    
        [regex enumerateMatchesInString:string
                                options:0
                                  range:NSMakeRange(0, [string length])
                             usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
    
                                 [results addObject:[string substringWithRange:[result rangeAtIndex:1]]];
                             }];
    
        if ([results count] > 0)
            return results;
    
        return nil;
    }
    
  4. 您使用的这些技术取决于您的RSS来源和您愿意接受的工作量。我认为大多数RSS阅读器只是通过1和/或2,而不是3。

    详情视图

    第二个是详细信息视图,您可以在其中查看与RSS项目关联的完整详细信息。一种非常简单的方法是不将tableview用于详细信息视图,而只是使用带有UIViewController的标准UIWebView并以这种方式显示结果。

    在回答有关标签的问题时,在iOS 6.0之前,您无法将格式应用于UILabel。在iOS 6.0中有效,您可以使用attributedText属性。但这不支持HTML。有人试图弥合这一差距(参见https://stackoverflow.com/a/4652521/1271826),但似乎比使用UIWebView要多得多。