除了我的另一個答案,它使用了一些輔助類,並假設你正在存儲的東西與核心數據,這是一個純NSXMLParser的方式來做到這一點。
在這個例子中,我假設你有三個UIImageView設置標籤(100,101,102),所以我們可以訪問它們。首先,啓動解析器代碼:
// Set the URL with the images, and escape it for creating NSURL
NSString *rssURLString = @"http://feeds.gettyimages.com/channels/RecentEditorialEntertainment.rss";
NSString *escapedURL = [rssURLString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSURL *rssURL = [NSURL URLWithString:escapedURL];
// rssParser is an NSXMLParser instance variable
if (rssParser) [rssParser release];
rssParser = [[NSXMLParser alloc] initWithContentsOfURL:rssURL];
[rssParser setDelegate:self];
success = [rssParser parse]; // return value not used
此時解析開始和的NSXMLParser會發現在XML不同的開始和結束元素火了它的委託方法的調用。
在這個例子中,我只寫didStartElement
方法:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
// look for an attribute called url
if ([attributeDict objectForKey:@"url"]) {
currentString = [attributeDict objectForKey:@"url"];
NSLog(@"Image URL: %@", currentString);
NSString* escapedURL = [currentString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:escapedURL]]];
UIImageView * tmpImageView = (UIImageView*)[scrollView viewWithTag:100+imageCount];
[tmpImageView setImage:image];
NSLog(@"images found: %d", imageCount);
imageCount++;
if (imageCount>2) [rssParser abortParsing];
}
}
下面我們看一下,看是否attributeDict(一個NSDictionary對象)包含一個URL屬性。如果是這樣,我們將它抓到currentString然後轉義它,只是說它有NSURL會禁止的字符。然後我們從該URL創建一個圖像,並根據標籤號碼設置適當的UIImageView圖像。 imageCount是一個計數器;一旦我們完成了三張圖片,我們就告訴NSXMLParser放棄解析XML。
如果你的XML會將URL元素標籤內,如:
<image>http://example.com/image.jpg</image>
你需要做更多的工作與didEndElement
和foundCharacters
。看到相當優秀的Introduction to Event-Driven XML Programming Guide for Cocoa。
我敲了一個快速和骯髒的應用程序來演示這個,你可以抓住它here。
來源
2010-05-18 18:24:01
hjd
URL是動態的,因爲我使用的是feedburner,這可以與「any」rss feed一起使用嗎?謝謝! – 2010-03-19 20:47:58
不確定你的意思是'網址是動態的'。但只要在xml文檔中有一個標籤來標識圖像url,就應該適用於任何xml文檔。 – Remover 2010-03-20 20:47:18
由此我的意思是所有的圖像託管在不同的地方... – 2010-03-26 19:57:41