XML请求数据和解析

对JSON习以为常之后,使用XML多少有点不习惯。其实二者差不多。这里讲述一下iOS自带的NSXMLParserDelegate的使用。


1.头文件中声名协议<NSXMLParserDelegate>,定义两个方法:-(void)postRequest 和 -(void)startParser:(NSData*)_data


2.源文件中实现,代码如下:

[objc]  view plain copy print ?
  1. -(void)postRequest  
  2. {  
  3.     //prepar request  
  4.     NSString *urlString = [NSString stringWithFormat:@"http://122.113.26.11/golive/api/loadRegionList.do"];  
  5.     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;  
  6.     [request setURL:[NSURL URLWithString:urlString]];  
  7.     [request setHTTPMethod:@"POST"];  
  8.       
  9.     //set headers 设置contentType和HTTPHeaderField  
  10.     NSString *contentType = [NSString stringWithFormat:@"text/xml"];  
  11.     [request addValue:contentType forHTTPHeaderField@"Content-Type"];  
  12.       
  13.     //create the body 在此处拼接XML字段,将每段尖括号的内容拆开拼接起来  
  14.     NSMutableData *postBody = [NSMutableData data];  
  15.     //    [postBody appendData:[[NSString stringWithFormat:@"<xml>"] dataUsingEncoding:NSUTF8StringEncoding]];  
  16.     [postBody appendData:[[NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"] dataUsingEncoding:NSUTF8StringEncoding]];  
  17.     [postBody appendData:[[NSString stringWithFormat:@"<request website=\"http://XXXXXXXXXXXXXX\">"] dataUsingEncoding:NSUTF8StringEncoding]];  
  18.     [postBody appendData:[[NSString stringWithFormat:@"<device devmodel=\"\" dnum=\"\" didtoken=\"\" dver=\"\"/>"] dataUsingEncoding:NSUTF8StringEncoding]];  
  19.     [postBody appendData:[[NSString stringWithFormat:@"<live mac=\"XXXXX\" deviceid=\"\" livetoken=\"\" livever=\"\"/>"] dataUsingEncoding:NSUTF8StringEncoding]];  
  20.     [postBody appendData:[[NSString stringWithFormat:@"</parameter>"] dataUsingEncoding:NSUTF8StringEncoding]];  
  21.     [postBody appendData:[[NSString stringWithFormat:@"</request>"] dataUsingEncoding:NSUTF8StringEncoding]];  
  22.    
  23.     //post  
  24.     [request setHTTPBody:postBody];  
  25.       
  26.     //get response  
  27.     NSHTTPURLResponse* urlResponse = nil;  
  28.     NSError *error = [[NSError alloc] init];  
  29.     self.responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];  
  30.     NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];  
  31.     NSLog(@"regionResponse Code: %ld", (long)[urlResponse statusCode]);  
  32.   
  33.     if ([urlResponse statusCode] >= 200 && [urlResponse statusCode] < 300) {  
  34.         NSLog(@"regionResponse: %@", result);  
  35.           
  36.         //这里获取到服务器返回的内容  
  37.           
  38.     }  
  39.       
  40.     NSString* aStr;  
  41.     aStr = [[NSString alloc] initWithData:postBody encoding:NSASCIIStringEncoding];  
  42.     NSLog(@"reg==========%@",aStr);  
  43. }  
  44.   
  45. //自定义一个 PraxMovie 方法,参数时NSDate型的数据,用来传递接受到的数据  
  46. - (void)startParser:(NSData*)data  
  47. {  
  48.     //NSXMLParser解析xml格式的数据,在这里初始化,并赋值  
  49.     NSXMLParser* parser = [[NSXMLParser alloc]initWithData:data];  
  50.     parser.delegate = self;  
  51.     [parser parse];  
  52.     NSLog(@"解析完成。。。");  
  53. }  
  54.   
  55. //文档出错的时候触发  
  56. - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError  
  57. {  
  58.     NSLog(@"%@",parseError);  
  59. }  
  60.   
  61. //遇到一个开始标签时候触发  
  62. - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName  
  63.   namespaceURI:(NSString *)namespaceURI  
  64.  qualifiedName:(NSString *)qualifiedName  
  65.     attributes:(NSDictionary *)attributeDict  
  66. {  
  67.     self.currentTagName = elementName;  
  68.     //region是需要解析的内容所对应的字段  
  69.     if ([currentTagName isEqualToString:@"region"]) {         
  70.     //name和code是需要解析的内容所对应的字段  
  71.         [self.name addObject:[attributeDict objectForKey:@"name"]];  
  72.         [self.code addObject:[attributeDict objectForKey:@"code"]];  
  73.         [self.regionDic setObject:[attributeDict objectForKey:@"code"] forKey:[attributeDict objectForKey:@"name"]];  
  74.           
  75.         NSLog(@"language:%@;code:%@",[attributeDict objectForKey:@"name"],[attributeDict objectForKey:@"code"]);  
  76.     }  
  77.       
  78. }  
  79.   
  80. //遇到结束标签时候出发  
  81. - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName  
  82.   namespaceURI:(NSString *)namespaceURI  
  83.  qualifiedName:(NSString *)qName;  
  84. {  
  85.     self.currentTagName = nil;  
  86. }  

这样就OK了,成功获取到后台数据并解析成所需要的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值