XML AND JSON

来源:互联网 发布:中国移动网络账号密码 编辑:程序博客网 时间:2024/06/06 04:39

通过一个第三方提供的云服务,查询IP归属地:http://www.youdao.com/smartresult-xml/search.s?type=ip&q=218.241.121.186

它的返回格式是xml :

wps_clip_image-7039

新建个例子:CSSimpleXML,设计原型:

wps_clip_image-28590

编辑按钮事件:

wps_clip_image-21977

定义NSURLConnection的委托:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];

NSURLConnection *connection = [[NSURLConnection alloc]   initWithRequest:request   delegate:self];

委托(delegate)是一种事件处理机制,当满足条件时候触发。delegate:self说明是委托当前对象处理事件,我们需要实现它们回调方法。

 NSURLConnection 回调方法

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 请求成功,并且接收数据。-(void) connection:(NSURLConnection *)connection  didFailWithError: (NSError *)error  请求成功,但是加载数据出现异常。- (void) connectionDidFinishLoading: (NSURLConnection*) connection加载数据成功,在connection:didReceiveData方法之后执行。

接收数据处理

wps_clip_image-7043

iPhone SDK提供的XML解析类只能解析utf-8编码,如果从服务器返回的xml编码是gbk等,要转换成utf-8再开始解析。

10.2 XML解析

关于iPhone发送GET请求,就是通过NSURLRequest和NSURLConnection两个类实现的。

在众多的回调方法。解析XML是在 connectionDidFinishLoading:方法开始的。

解析XML文件也是要通过XML回调方式实现解析处理的。

NSXMLParser,是iPhone解析XML SDK工具类。

NSXMLParser采用SAX方式而不是DOM方式解析,SAX是基于事件触发的解析方式,解析器从上到下遍历xml文档,遇到开始标签、结束标签、文档开始、文档结束和字符串都会触发事件。

 解析开始处理

wps_clip_image-6570 

NSXMLParser回调方法

- (void)parserDidStartDocument:(NSXMLParser *)parser文档开始的时候触发- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError  文档出错的时候触发- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *) qualifiedName attributes:(NSDictionary *)attributeDict 遇到一个开始标签时候触发。- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 遇到字符串时候触发- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementNamenamespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName 遇到结束标签时候出发。- (void)parserDidEndDocument:(NSXMLParser *)parser  遇到文档结束时候触发。

文档开始的回调方法

这个方法在解析过程中只调运一次,一般在这个方法中进行有关解析的初始化处理。

wps_clip_image-7073

文档出错回调方法

wps_clip_image-4580

遇到开始标签回调方法

参数elementName是标签的名字,attributeDict 是属性列表,namespaceURI 是命名空间,如果有命名空间qualifiedName是指定的前缀名。

wps_clip_image-9813

遇到字符串回调方法

wps_clip_image-67

遇到结束标签回调方法

wps_clip_image-30184

遇到结束文档回调方法

wps_clip_image-28447

10.3 JSON解析

wps_clip_image-1978

http://www.geonames.org/export/ws-overview.html

获得JSON:

{    status =     {        message = "the daily limit of 30000 credits demo has been exceeded.Please throttle your requests or use the commercial service.";        value = 18;    };}

10.3.1 JSON解析API

iPhone SDK没有提供JSON解析API,可以使用第三方的API类库json-framework,下载地址:

https://github.com/stig/json-framework/

把Classes/JSON/下面的类拷贝到我们的工程的Classes目录下面,右键添加存在的类文件。

实现回调方法

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data - (void) connectionDidFinishLoading: (NSURLConnection*) connection-(void) connection:(NSURLConnection *)connection  didFailWithError: (NSError *)error 

connection:didReceiveData:

wps_clip_image-14612

connectionDidFinishLoading:

outString的 JSONValue消息获得NSMutableDictionary,JSON api中提供了NSString的分类(Catelog)

wps_clip_image-23473

文档出错回调方法

wps_clip_image-5961

点击按钮事件

-(IBAction)go:(id)sender{    NSString *strurl =@"http://api.geonames.org/findNearByWeatherJSON?lat=43&lng=-2&username=demo";  NSURL *url = [NSURL URLWithString:strurl];  NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];  NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];  [connection release];  [request release];  [activityIndicatorView startAnimating];}

10.4 POST请求

为了学习iPhone的POST请求,安排案例如下:

在画面中输入用户名和密码,然后以POST方式提交数据到服务器端。

wps_clip_image-25573

NSMutableURLRequest

POST请求与GET不同,不使用的NSURLRequest,而是使用NSMutableURLRequest类,这是一个可变的NSURLRequest

类。

wps_clip_image-727

POST参数是以一个字符串方式传递: "name=tony&password=123”

[request setHTTPMethod:@"POST"];

知道请求方法为POST方法,但是要注意POST必须大写。

[request setHTTPBody:postData];该语句是将要提交的数据放到请求体中。

connection:didReceiveData:

wps_clip_image-20197

connectionDidFinishLoading:

wps_clip_image-2686

文档出错回调方法

wps_clip_image-26901


原创粉丝点击