2

我正在努力解决我的问题,我希望有人可以在这里帮助我。我有一个带有格式化数据的 RSS 提要。例如

<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 提要?

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

4

1 回答 1

3

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

主视图

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

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

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

  3. imgdescriptionorcontent:encoded元素中解析 HTML标记。您可以通过另一个解析器运行 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;
    }
    

您采用哪种技术取决于您的 RSS 源和您愿意完成的工作量。我认为大多数 RSS 阅读器只是通过 1 和/或 2,而不是 3。

详情视图

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

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

于 2013-02-26T17:06:27.360 回答