2012-10-17 22 views
6

我是iPhone的新鮮開發者。 我正在處理簡單的xml解析演示。 我只想如何得到下面的XML代碼的圖像?如何從XML獲取圖像?

<item> 
     <title>Rain washes out England qualifier</title> 
     <description>England's World Cup qualifier against Poland is postponed because of a waterlogged pitch and is rescheduled for 16:00 BST on Wednesday.</description> 
     <link>http://www.bbc.co.uk/sport/0/football/19941036</link> 
     <guid isPermaLink="false">http://www.bbc.co.uk/sport/0/football/19941036</guid> 
     <pubDate>Tue, 16 Oct 2012 21:18:26 GMT</pubDate> 
     <media:thumbnail width="66" height="49" url="http://news.bbcimg.co.uk/media/images/63530000/jpg/_63530879_016250328-1.jpg"/> 
     <media:thumbnail width="144" height="81" url="http://news.bbcimg.co.uk/media/images/63529000/jpg/_63529179_016250328-1.jpg"/> 
    </item> 

我該如何獲取圖像?

我已經使用以下代碼獲得標題或說明。

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 

    if([elementName isEqualToString:className]) 
    { 
     [items addObject:item]; 
     [item release]; 
     item = nil; 
    } 
    else 
    { 
     if([currentNodeContent length] != 0) 
     { 

      if([className isEqualToString:@"item"]) 
      { 


       if([elementName isEqualToString:@"title"]|| [elementName isEqualToString:@"description"] || [elementName isEqualToString:@"url"]) 
       { 
        [item setValue:currentNodeContent forKey:currentNodeName]; 

        if ([elementName isEqualToString:@"media:thumbnail"]) 
        { 
         [item setValue:currentNodeContent forKey:@"url"]; 
        } 

       } 


       else 
       { 

       } 

      } 
     } 
      else 
      { 
      } 

     } 


    [currentNodeContent release]; 
    currentNodeContent = nil; 
    [currentNodeName release]; 
    currentNodeName = nil; 

} 

在此先感謝。

+0

你有沒有得到的網址? –

+0

NSData * imageData = [NSData dataWithContentsOfURL:[NSURL urlWithString:imageLink]]; UIImage * image = [UIImage imageWithData:imageData]; 將上面的代碼放在NSXMLParser中,對於URL元素 – kamleshwar

+0

但是,如果圖像或圖像的長度很大(這不推薦),這會導致解析速度較慢。 – kamleshwar

回答

0

您的xml在服務器上只有您的圖片的url,因此在解析時將此url保存在字符串中。而在你需要顯示在屏幕上的圖像時,使用

NSData* imageData = [NSData dataWithContentsOfURL:[NSURL urlWithString:your_url]]; 
UIImage* image = [UIImage imageWithData:imageData]; 

要加載異步有很多樣品可在Git的樞紐圖像獲取URL中的圖像,使用asyncImage之一,緩存最近下載的圖像。

0

要想從URL中的圖像使用此方法返回一個圖像

UIImage * imageFromURL = [self getImageFromURL:imageurlstring]; 

-(UIImage *) getImageFromURL:(NSString *)fileURL { 
    UIImage * result; 

    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]]; 
    result = [UIImage imageWithData:data]; 

    return result; 
} 

保存圖像使用此方法

[self saveImage:imageFromURL withFileName:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1] inDirectory:documentsDirectoryPath]; 

-(void) saveImage:(UIImage *)image withFileName:(NSString *)imageName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath { 
    imageName = [imageName stringByReplacingOccurrencesOfString:@"%20" withString:@" "]; 
    [UIImagePNGRepresentation(image) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, extension]]options:NSAtomicWrite error:nil];  
} 
0

可以在.h文件中作爲的NSString聲明IMAGELINK。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"media:thumbnail"]) { 
    NSLog(@"attributes1: %@", attributeDict); 
    imageLink = [attributeDict objectForKey:@"url"]; 
    } 
} 

使用上面的代碼,你可以得到圖像的網址,然後使用下面的代碼來顯示圖像。

NSData* imageData = [NSData dataWithContentsOfURL:[NSURL urlWithString:imageLink]]; 
UIImage* image = [UIImage imageWithData:imageData]; 
+0

imageLink = [attributeDict objectForKey:@「url」] ;什麼是imageLink? –

+0

您可以將.h文件中的imageLink聲明爲NSString。即NSString * imageLink; –