在iphone的开发当中,会涉及到很多的服务,比如说获取天气,获取IP地址,获取手机归属地的功能。这些功能实际上使用的是webservice的功能。这个功能在iphone开发当中,应该是非常常用的功能。
具体的webservice地址为:www.webxml.com.cn,这个地址,提供了上述提到的各种功能。
在程序中,使用webservice的方法,总体来说有两种方法。
1、使用soap的POST请求的方法,发送xml的soap格式的消息,然后获得xml格式的结果,然后在做parse,就可以完成相关内容的处理了。
NSString *province=[NSStringstringWithFormat:@"上海"];
//设置soap请求信息
NSString *soapString=[[NSStringalloc] initWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
"<soap:Body>"
"<getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"
"<theCityName>%@</theCityName>"
"</getWeatherbyCityName>"
"</soap:Body>"
"</soap:Envelope>",province];
NSLog(@"%@",soapString);
//soap请求地址
NSURL *url=[[NSURLalloc] initWithString:@"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"];
//请求
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
//设置请求头部
////设置ContentType
[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
////设置SOAPAction
[request addValue:@"http://WebXml.com.cn/getWeatherbyCityName" forHTTPHeaderField:@"SOAPAction"];
//设置Content-length
[request addValue:[NSStringstringWithFormat:@"%d",[soapString length]] forHTTPHeaderField:@"Content-Length"];
//设置请求类型 POST或GET
[request setHTTPMethod:@"POST"];
//设置请求Body(只有post方式有)
[request setHTTPBody:[soapString dataUsingEncoding:NSUTF8StringEncoding]];
//连接
NSURLConnection *connection=[NSURLConnection connectionWithRequest:request delegate:self];
if (connection) {
webData=[NSMutableData data];
}
}
_________ViewController文件_____________
#import <UIKit/UIKit.h>
//注意使用的协议
@interface WebServiceViewController : UIViewController<NSURLConnectionDelegate,NSURLConnectionDataDelegate>{
NSMutableData *webData;
UIWebView *myWebView;
UITextField *textFiled;
}
@property (strong, nonatomic) NSMutableData *webData;
@property (strong, nonatomic) UIWebView *myWebView;
@property (strong, nonatomic) UITextField *textFiled;
-(void) buttonClicked:(id) sender;
@end
---------NSURLConnectionDelegate,NSURLConnectionDataDelegate实现方法---------
//接收相应的时候触发
-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
[webData setLength:0];
}
//接收数据的时候触发
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[webData appendData:data];
}
//全部完成时触发
-(void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSString *dataString=[[NSStringalloc] initWithBytes:[webDatabytes] length:[webDatalength] encoding:NSUTF8StringEncoding];
NSLog(@"%@",dataString);
}
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"Error:%@",error);
}
2、方法是直接获取NSData的数据
NSString *weatherRequestUrlStr = [NSString stringWithFormat:@"%@%@",kWeatherServiceURLStr,[[ipCityLocation citySimpleName] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"request = %@", weatherRequestUrlStr);
NSData *weatherReponseData = [NSData dataWithContentsOfURL:[NSURL URLWithString:weatherRequestUrlStr]];
这样通过NSData获取到响应数据,然后剩下的就是处理相应数据了。可以使用NSXMLParserDelegate,这个委托的处理方法类似于扫描的过程,从而完成parse的内容。
xmlParser = [[NSXMLParser alloc] initWithData:weatherReponseData];
[xmlParser setDelegate:self];
[xmlParser setShouldProcessNamespaces:NO];
[xmlParser setShouldReportNamespacePrefixes:NO];
[xmlParser setShouldResolveExternalEntities:NO];
分析的内容格式如下:
上述就是NSMutableArray 的格式,逐个的分析和解释字符串。