iPhone中XML处理以及网络上的图片显示

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

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.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解析以及网络上图片的展示。




本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2011/03/30/2000338.html,如需转载请自行联系原作者

相关文章
|
7月前
|
XML 数据采集 存储
挖掘网络宝藏:R和XML库助你轻松抓取 www.sohu.com 图片
网络上有无数的图片资源,但是如何从特定的网站中快速地抓取图片呢?本文将介绍一种使用 R 语言和 XML 库的简单方法,让你可以轻松地从 www.sohu.com 网站上下载你感兴趣的图片。本文将涉及以下几个方面: ● 为什么选择 R 语言和 XML 库作为图片爬虫的工具? ● 如何使用 R 语言和 XML 库来访问、解析和提取网页上的图片链接? ● 如何使用代理 IP 技术,参考亿牛云爬虫代理的设置,避免被网站屏蔽或限制? ● 如何实现多线程技术,提高图片爬取的效率和速度? ● 如何将爬取到的图片保存到本地或云端,进行数据分析和可视化?
109 0
|
XML JSON Java
网络原理,了解xml, json,protobuffer的特点
网络原理,了解xml, json,protobuffer的特点
|
机器学习/深度学习 存储 编解码
不到1ms在iPhone12上完成推理,苹果提出移动端高效主干网络MobileOne
不到1ms在iPhone12上完成推理,苹果提出移动端高效主干网络MobileOne
169 0
|
XML 安全 Java
网络安全-XXE(XML外部实体注入)原理、攻击及防御
网络安全-XXE(XML外部实体注入)原理、攻击及防御
527 0
网络安全-XXE(XML外部实体注入)原理、攻击及防御
|
JSON HandyJSON 开发工具
swift网络请求 数据解析 图片显示 模型转换
Alamofire :swift版本的网络请求sdk,是AFNetworking研发团队研发的swift版网络请求工具类 SwiftyJSON:当然就是用来解析json数据的咯 Kingfisher: 是用来显示网络图片的与oc中的SDWebImage类似 HandyJSON: 可将json转模型
262 0
swift网络请求 数据解析 图片显示 模型转换
|
XML 存储 JSON
Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
263 0
|
XML JSON 前端开发
Android网络请求,获取数据demo,几种网络请求的区别,JSON 与 XML 的区别、优劣势
Android网络请求,获取数据demo,几种网络请求的区别,JSON 与 XML 的区别、优劣势
253 0
|
XML JSON JavaScript
iOS网络请求指南: 请求参数的拼接(签名)、返回参数解析(JSON/XML解析)、案例(条码支付综合前置平台申请退款)
iOS网络请求指南: 请求参数的拼接(签名)、返回参数解析(JSON/XML解析)、案例(条码支付综合前置平台申请退款)
427 0
iOS网络请求指南: 请求参数的拼接(签名)、返回参数解析(JSON/XML解析)、案例(条码支付综合前置平台申请退款)