我正在使用我的應用中的RSS源,特別是Drudge Report的。我對這類東西很陌生,同時也是使用Xcode的NSXMLParser
的新手。每種飼料顯然都代表一篇文章。每個Feed由<item></item>
標籤表示。iOS NSXMLParser - 始終如一地從XML標記中導出圖像源URL
在這些標籤以內,有關於<description></description>
標籤所包含的信息的描述。在描述中,有些條款可能與該文章相關的圖像,如下面的截圖所示:
我強調的部分是我需要(特別是URL字符串)的圖像。我可以將每篇文章的描述導出爲NSMutableString
,但是如何在使用NSXMLParser解析XML時如何派生圖像的URL?下面是我的代碼,至於我是如何得到這一切的實現:
@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"
。如何使用正則表達式獲取此圖像網址的第一次出現?
很抱歉,但每當我在解析XML – Rafi
你可以給我你的RSS的URL或只是描述標籤,所以我可以做一些試驗,從來沒有執行這個方法 –
當然視圖-source:http://feeds.feedburner.com/DrudgeReportFeed – Rafi