iPhone中XML處理以及網路上的圖片顯示

funnyok發表於2021-09-09

xml處理:

  iPhone開發中,XML處理的方式與.net區別很大。個人感覺沒有donot那麼方便。蘋果sdk中提供了NSXMLParser這個類庫來解析xml。它需要一個url作為輸入引數,透過NSXMLParser的委託方法來解析這個xml檔案。NSXMLParser中主要有三個委託方法來解析XML:

1、didStartElement

2、didEndElement

3、foundCharacters

didStartElement:當解析器物件遇到xml的開始標記時,呼叫這個方法。

- (void)parser:(NSXMLParser*)parser didStartElement:(NSString *)    elementName namespaceURI:(NSString  *)namespaceURI qualifiedName: 
   (NSString *)qName attributes:(NSDictionary  *)attributeDict

didStartElement:
當解析器物件遇到xml的結束標記時,呼叫這個方法。

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

當解析器找到開始標記和結束標記之間的字元時,呼叫這個方法。

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

在iphone中顯示網路上的圖片:

透過一個url展示圖片,分為三個步驟:

1、透過url建立一個NSURL物件

2、透過NSURL物件將圖片資料載入到NSData物件中

3、將NSData物件賦給UIImage

NSURL *url = [NSURL
URLWithString:@”www.cnblogs.comimagessample.jpg”];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [[UIImage alloc] intiWithData:data];

建立一個view based application,命名為XMLWebImages下面我們將圖片的地址儲存在伺服器的一個xml檔案中,透過解析xml,將圖片的地址解析出來,然後展示。

開啟XMLWebImagesViewController.h。新增一個名為webScrollView 的UIScrollView型別的物件屬性,並加上IBOutlet標識。

#import  @interface XMLWebImageViewController : UIViewController 
{    
IBOutlet UIScrollView *webScrollView;        
}
@property (nonatomic, retain) IBOutlet UIScrollView * webScrollView;
@synthesize scrollView;

建立一個命名為XMLWebView,並繼承UIView的子類,這這個子類中新增UIImageView屬性物件,命名為imageView,並加上IBOutlet標識。

@interface XMLWebView : UIView 
{ 
    IBOutlet UIImageView *imageView;
}
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
@synthesize imageView;

建立一個.XIB檔案,上面放置一個UIImageView,與上面的程式碼中的imageView建立關聯。

建立一個實體類,這個類裡面只有一個屬性,用來存放圖片的地址:

@interface XMLWebElement: NSObject
{ 
UIImage *imgXML;
}
@property (nonatomic, retain) UIImage * imgXML;
@end@synthesize image;

現在建立從伺服器上獲取xml,解析xml,展示圖片的程式碼。開啟XMLWebImagesViewController.h,建立一個NSXMLParser物件。
一個存放連結實體物件的陣列xmlElements。一個臨時的XMLWebElement 物件。

@interface XMLWebImagesViewController: UIViewController 
{ 
    IBOutlet UIScrollView *scrollview;
    NSXMLParser *xmlParser;
    NSMutableString *currentNode;
    NSMutableArray *xmlElements;
    XMLWebElement *tempElement;
}

在viewDidLoad 方法中為xmlElements 分配記憶體,初始化parser物件的xml地址:

- (void)viewDidLoad
{ 
    [super viewDidLoad];
    xmlElements = [[NSMutableArray alloc] init];
    xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:
 [NSURL URLWithString:@"http://www.cnblogs.com/images.xml"]];
    [xmlParser setDelegate:self]; 
    [xmlParser parse];
}

伺服器上的xml結構如下:解析xml的三個方法的程式碼如下:

 
 
http://www.cnblogs.com/testimage1.jpg 
 
 
http://www.cnblogs.com/testimage2.jpg 


解析xml的三個委託方法程式碼如下:

- (void)xmlParser:(NSXMLParser *)xmlParser didStartElement:
 (NSString *)elementName namespaceURI:(NSString *)namespaceURI 
 qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if(![elementName compare:@"PictureInfo"])
    {
        tempElement = [[iCodeBlogXMLElement alloc] init];
    }
 
    else if(![elementName compare:@"imageURL"])
    {
        currentAttribute = [NSMutableString string];
    }
 
    else if(![elementName compare:@"imageTitle"])
    {
        currentAttribute = [NSMutableString string];
    }
}
 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)  
 elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{    
if(![elementName compare:@"PictureInfo"])   
 {        
[xmlElementObjects addObject:tempElement];  
  }    
else if(![elementName compare:@"imageURL"])  
  {       
 NSURL *imageURL = [NSURL URLWithString:currentAttribute];   
     NSData *data =  [NSData dataWithContentsOfURL:imageURL];     
   UIImage *image = [[UIImage alloc] initWithData:data];  
      [tempElement setImage:image];   
 }   
 else if(![elementName compare:@"imageTitle"])   
 {       
NSLog(@"The image title is %@", currentAttribute);  
      [tempElement setImageTitle:currentAttribute];  
  }   
 else
if(![elementName compare:@"Pictures"])  
  {       
 [self layoutSubview];   
 }
}
 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if(self.currentAttribute)
    {
        [self.currentAttribute appendString:string];
    }
}

這樣我們就將xml中的圖片地址解析出來。然後我們下面程式碼展示圖片:

NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [[UIImage alloc] intiWithData:data];

總結:本文透過程式碼講述了iphone中xml解析以及網路上圖片的展示。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3137/viewspace-2799971/,如需轉載,請註明出處,否則將追究法律責任。

相關文章