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

來源:互聯網
上載者:User

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 *)qNamefoundCharacters:

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

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

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

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

1、通過url建立一個NSURL對象

2、通過NSURL對象將圖片資料載入到NSData對象中

3、將NSData對象賦給UIImage

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

下面我們將圖片的地址儲存在伺服器的一個xml檔案中,通過解析xml,將圖片的位址解析出來,然後展示。

建立一個view based application,命名為XMLWebImages

開啟XMLWebImagesViewController.h。添加一個名為webScrollView 的UIScrollView類型的對象屬性,並加上IBOutlet標識。

#import <UIKit/UIKit.h> @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的三個方法的代碼如下:

<WebImages>   
<image>
<URL>http://www.cnblogs.com/testimage1.jpg</URL>
</image>
<images>
<URL>http://www.cnblogs.com/testimage2.jpg</URL>
</images>
</WebImages>

解析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解析以及網路片的展示。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.