Я работаю с RSS-каналами в своем приложении, в частности с отчетами Drudge. Я совершенно новичок в таких вещах, а также новичок в использовании Xcode's NSXMLParser
. Кажется, что каждый канал представляет собой статью. Каждый фид представлен тегами <item></item>
.iOS NSXMLParser - последовательно выводить URL-адрес источника изображения из XML-тега
В этих тегах есть описание сведений, содержащихся в тегах <description></description>
. В описании, некоторые статьи могут иметь образ, связанный с этой статьей, как показано на следующем скриншоте:
Часть я выделил это изображение мне нужно получить (в частности, строку URL). Я могу описать каждую статью как NSMutableString
, но как получить URL-адрес изображения при анализе XML с помощью NSXMLParser? Ниже мой код так далеко, как я получаю все это сделано:
@interface ViewController() <NSXMLParserDelegate, UITableViewDataSource, UITableViewDelegate> {
NSXMLParser *parser;
NSMutableArray *feeds;
NSMutableDictionary *item;
NSMutableString *title;
NSMutableString *link;
NSMutableString *description;
NSString *element;
}
.
.(other code)
.
#pragma mark - NSXMLParserDelegate
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
element = elementName;
if ([element isEqualToString:@"item"]) {
item = [[NSMutableDictionary alloc] init];
title = [[NSMutableString alloc] init];
link = [[NSMutableString alloc] init];
description = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if ([element isEqualToString:@"title"]) {
[title appendString:string];
}
else if ([element isEqualToString:@"feedburner:origLink"]) {
[link appendString:string];
}
else if ([element isEqualToString:@"description"]) {
[description appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"item"]) {
NSString *filteredTitle = [title stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString *filteredLink = [link stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if (![filteredLink containsString:@"https://itunes.apple.com/"]) {
[item setObject:filteredTitle forKey:@"title"];
[item setObject:filteredLink forKey:@"link"];
[item setObject:description forKey:@"description"];
[feeds addObject:[item copy]];
}
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
[self.tableView reloadData];
}
ПРОГРЕСС
До сих пор я добавил следующее в моем didEndElement
методе:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"item"]) {
NSString *filteredTitle = [title stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString *filteredLink = [link stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if (![filteredLink containsString:@"https://itunes.apple.com/"]) {
[item setObject:filteredTitle forKey:@"title"];
[item setObject:filteredLink forKey:@"link"];
[item setObject:description forKey:@"description"];
if ([description rangeOfString:@"img style"].location != NSNotFound)
{
}
[feeds addObject:[item copy]];
}
}
}
Теперь, когда я знаю, что в описании есть строка img style
, мне нужно получить src="whateverImageURL"
. Как использовать регулярное выражение для первого появления этого URL-адреса изображения?
Извините, но этот метод не был выполнен, когда я разобрал XML – Rafi
вы можете дать мне адрес вашего RSS или просто тег описания, так что я могу сделать некоторые испытания –
Конечно зрения -source: http: //feeds.feedburner.com/DrudgeReportFeed – Rafi