ios 链接webservice(XML) 解析

 

首先你得知道你调用的web长什么样。我的长这样。所以你需要从

<?xml version="1.0" encoding="utf-8"?>开始拼接。

 

首先 先拼接好需要传递的参数

 NSString  *webServiceBodyStr = [NSString stringWithFormat : @"%@%@%s%@%s",@"<LoginSystem xmlns=\"http://temgghpuri.org/\"><userID>",_texName.text,"</userID> <password>", [self MD5ForUpper32Bate: _texpass.text],"</password><clientVersion>1</clientVersion><insertOnlineUser>true</insertOnlineUser></LoginSystem>"];  //传递的参数  

在拼接好头部

NSString *webServiceStr = [NSString stringWithFormat: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"  "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2011/XMLSchema-instance\" xmlns:xsd=\"http://www.w23.org/2011/XMLSchema \" xmlns:soap=\"http://sche3mas.xmlsoap.org/soap/envelope/ \">\n" "<soap:Body>\n" "%@\n"  "</soap:Body>\n""</soap:Envelope>",webServiceBodyStr];//webService头

NSString *path = @"http://999.99.99.99:5678/WsUcLogin.asmx?op=LoginSystem";// 这部分是你们自己的web地址哦!
NSURL *url = [NSURL URLWithString:path];

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];

NSString *msgLength = [NSString stringWithFormat:@"%ld", webServiceStr .length];
[theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-type"];
// [theRequest addValue:SOAPActionStr forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:[webServiceStr dataUsingEncoding:NSUTF8StringEncoding]];
NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionTask *task = [session dataTaskWithRequest:theRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

NSLog(@"%@-",response);
NSLog(@"%@---askl",error);
NSLog(@"%@ -- data",data);
if (error!=nil) {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"超时了!" preferredStyle: UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {}]];
//弹出提示框;
[self presentViewController:alert animated:true completion:nil];
return;
}
//获得请求返回的xml字符串
NSString * dataString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"xml = %@",dataString);
//系统自带的
NSXMLParser *par = [[NSXMLParser alloc] initWithData:data];
[par setDelegate:self];//设置NSXMLParser对象的解析方法代理
[par parse];//调用代理解析NSXMLParser对象,看解析是否成功
NSLog(@"%@-",par);

if (error) {
NSLog(@"Error:%@",error);
}
else
{
NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
}
}];
[task resume];

-------------------------------------------一下是解析--------------------------

 

因为我返回来的样式是:

 

 所以我需要找到users的节点

#pragma mark--准备解析
//step 1 :准备解析
- (void)parserDidStartDocument:(NSXMLParser *)parser{
_list = [[NSMutableArray alloc] init];
strMessage = nil;
}
#pragma mark--准备解析节点
//step 2:准备解析节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
NSLog(@"%@", NSStringFromSelector(_cmd) );
self.currentElement = elementName;

if ([_currentElement isEqualToString:@"USERS"]){
self.person = [[userModel alloc]init];
}

}
#pragma mark--获取首尾节点间内容
//step 3:获取首尾节点间内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"%@", string);
if ([self.currentElement isEqualToString:@"USER_ID"]) {
[self.person setUSER_ID:string];
}else if ([self.currentElement isEqualToString:@"USER_NAME"]){
[self.person setUSER_NAME:string];
}else if ([self.currentElement isEqualToString:@"USER_STATUS"]){
[self.person setUSER_STATUS:string];
}else if ([self.currentElement isEqualToString:@"ENABLE_CONTROL_DEPARTMENT"]){
[self.person setENABLE_CONTROL_DEPARTMENT:string];
}else if ([self.currentElement isEqualToString:@"DEPARTMENT_NAME"]){
[self.person setDEPARTMENT_NAME:string];
}else if ([self.currentElement isEqualToString:@"DEPARTMENT_CODE"]){
[self.person setDEPARTMENT_CODE:string];
}
//错误
if ([self.currentElement isEqualToString:@"Message"]){
strMessage =string;
}

}

#pragma mark--解析完当前节点
//step 4 :解析完当前节点
- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock{

}

#pragma mark--解析完一个节点
//step 5:解析完一个节点
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName{

if ([elementName isEqualToString:@"USERS"]) {
[self.list addObject:self.person];
}
// self.currentElement = nil;
}

#pragma mark--解析结束
//step 解析结束
- (void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"parserDidEndDocument...");
NSLog(@"list:@%@",_list);

}

posted @ 2017-09-29 11:16  懒猫口米  阅读(294)  评论(0编辑  收藏  举报