我正在努力解决我的问题,我希望有人可以帮助我。我有一个带有格式化数据的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是我在项目中实现的来源。
答案 0 :(得分:3)
在RSS阅读器中,在一个用户界面中通常有两个级别,您必须考虑如何处理此问题。主视图和详细信息视图。我们将一次解决这些问题:
在主视图中,您正在查看Feed中的项目列表。在这种情况下,大多数RSS阅读器将只显示项目的纯文本标题,也可能只显示与该项目相关联的图像。这里的问题是检索图像URL的位置。 (据我所知)这里有三个选项:
url
元素的media:content
属性。有关示例,请参阅http://news.yahoo.com/rss/。
url
元素中的image
元素。有关示例,请参阅http://www.dpreview.com/feeds/news.xml。
从img
或description
元素中解析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;
}
您使用的这些技术取决于您的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
要多得多。