soap访问服务器webservise以及xml解析(dom)+委托 ---封装

解析的方式 有俩种 sax dom 里面都涉及到了

但是sax有个缺陷---中文和英文在同时在一个字符串的时候他分成了俩个部分。我也很奇怪

dom是本局我自己的情况来的

(希望有兴趣的朋友们研究下反馈给我 谢谢)



#import <Foundation/Foundation.h>

#import "TBXML.h"


@protocol MyProtocol <NSObject>

-(void)kankan:(NSArray*)f;

-(void)kankan1:(NSArray*)f;

-(void)kankan2:(NSArray*)f;

-(void)kankan3:(NSArray*)f;


@end

@interface TabelViewShow :NSObject<NSXMLParserDelegate,NSURLConnectionDelegate>{

Nsstring*str;

id<MyProtocol> _delegate;

Nsstring *currentString;

Nsstring *attrString;

Nsstring *preAttrString;

}

-(void)show:(NSArray*)array;

-(void)parse:(NSData*)path;


@property(nonatomic,retain)id<MyProtocol>delegate;

@property (strong,nonatomic) NSURLConnection *conn;

ottom:0px; font-size:11px; font-family:Menlo; color:rgb(187,nonatomic) NSMutableData *webData;

ottom:0px; font-size:11px; font-family:Menlo; color:rgb(187,nonatomic) NSXMLParser *xmlParser;

ottom:0px; font-size:11px; font-family:Menlo; color:rgb(187,nonatomic) NSMutableArray *soapResults;

@property (nonatomic)BOOL elementFound;

@property (strong,nonatomic) Nsstring *matchingElement;


@end













//

// TabelViewShow.m

// demo5

// Created by chengs on 13-5-8.

// copyright (c) 2013 Chengs. All rights reserved.

//


#import "TabelViewShow.h"


@implementation TabelViewShow

@synthesize elementFound;

@synthesize matchingElement;

@synthesize soapResults;

@synthesize delegate =_delegate;

-(void)show:(NSArray*)array{

matchingElement = [array objectAtIndex:0];

Nsstring*paw = [array objectAtIndex:1];

if (!soapResults) {

soapResults = [[NSMutableArrayalloc] init];

}

Nsstring *soapMsg = [NsstringstringWithFormat:

@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"

"<soap12:Envelope "

"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "

"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "

"xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"

"<soap12:Body>"

"%@"

"</soap12:Body>"

"</soap12:Envelope>",paw];

NSLog(@"tableviewshow = %@",soapMsg);

NSURL *url = [NSURLURLWithString:@"http://xxx.xxx.xxx.xxx:xxx/WellService.asmx"];

// 根据上面的URL创建一个请求

NSMutableuRLRequest *req = [NSMutableuRLRequestrequestWithURL:url];

Nsstring *msgLength = [NsstringstringWithFormat:@"%d",[soapMsglength]];

// 添加请求的详细信息,与请求报文前半部分的各字段对应

[req addValue:@"application/soap+xml; charset=utf-8"forHTTPHeaderField:@"Content-Type"];

[req addValue:msgLengthforHTTPHeaderField:@"Content-Length"];

// 设置请求行方法POST,与请求报文第一行对应

[req setHTTPMethod:@"POST"];

// SOAP消息加到请求中

[req setHTTPBody: [soapMsgdataUsingEncoding:NSUTF8StringEncoding]];

// 创建连接

_conn = [[NSURLConnectionalloc] initWithRequest:reqdelegate:self];

if (_conn) {

_webData = [[NSMutableDataalloc]init];

}

}

// 刚开始接受响应时调用

-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *) response{

NSLog(@"开始接受");

[_webDatasetLength: 0];

}

// 每接收到一部分数据就追加到webData

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *) data {

NSLog(@"受到了数据");

[_webDataappendData:data];

}


// 出现错误

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *) error {

NSLog(@"====%@",error);

_conn = nil;

_webData = nil;

}


// 完成接收数据时调用

-(void) connectionDidFinishLoading:(NSURLConnection *) connection {

NSLog(@"接收完成");

Nsstring *theXML = [[Nsstringalloc] initWithBytes:[_webDatamutableBytes]

length:[_webDatalength]

encoding:NSUTF8StringEncoding];

// NSLog(@"=======%@",theXML);

NSData *newData = [theXMLdataUsingEncoding:NSUTF8StringEncoding];

[selfparse:newData];

// [self SoapMessageResultXml:newData ServiceMethodName:matchingElement];

// // 使用NSXMLParser解析出我们想要的结果

// NSData *newData = [theXML dataUsingEncoding:NSUTF8StringEncoding];

// _xmlParser = [[NSXMLParser alloc] initWithData: newData];

// _xmlParser.delegate = self;

// [_xmlParser setShouldResolveExternalEntities: YES];

// [_xmlParser parse];

}

-(void)parse:(NSData*)path{

NSError *err;

str = [NsstringstringWithFormat:@"%@Response",matchingElement];

Nsstring*Result = [NsstringstringWithFormat:@"%@Result",matchingElement];

TBXML *tbXML = [TBXMLnewTBXMLWithXMLData:path error:&err];

if (!tbXML) {

NSLog(@"%@",[errlocalizedDescription]);

}

TBXMLElement *rootElement = tbXML.rootXMLElement;

if (rootElement) {

TBXMLElement *bookElement = [TBXMLchildElementNamed:@"soap:Body"parentElement:rootElement];

if (bookElement) {

TBXMLElement *getUserCheckResponse = [TBXMLchildElementNamed:strparentElement:bookElement];

if (getUserCheckResponse) {

TBXMLElement *getUserCheckResult = [TBXMLchildElementNamed:Result parentElement:getUserCheckResponse];

if (getUserCheckResult) {

TBXMLElement *nameElement = [TBXMLchildElementNamed:@"anyType"parentElement:getUserCheckResult];

while (nameElement) {

Nsstring *name = [TBXMLtextForElement:nameElement];

NSLog(@"name = %@ ",name);

[soapResultsaddobject:name];

nameElement = [TBXMLnextSiblingNamed:@"anyType"searchfromElement:nameElement];

}

if ([matchingElementisEqualToString: @"getUserCheck"]) {

[self.delegatekankan:soapResults];

}elseif ([matchingElementisEqualToString:@"GetWellList_Super_AddWellType"])

{

[self.delegatekankan1:soapResults];

}elseif ([matchingElementisEqualToString: @"GetTemplateItems"])

{

[self.delegatekankan2:soapResults];

}

else if ([matchingElementisEqualToString: @"checkMD5WithTemplate"])

{

[self.delegatekankan3:soapResults];

}

}

}

}

}

}


//下面是sax解析 现在弃用

// 开始解析一个元素名

//-(void) parser:(NSXMLParser *) parser didStartElement:(Nsstring *) elementName namespaceURI:(Nsstring *) namespaceURI qualifiedname:(Nsstring *) qName attributes:(NSDictionary *) attributeDict {

// str = [Nsstring stringWithFormat:@"%@Response",matchingElement];

// if ([elementName isEqualToString:str]) {

// elementFound = YES;

// }

//

//}

//

//// 追加找到的元素值,一个元素值可能要分几次追加

//-(void)parser:(NSXMLParser *) parser foundCharacters:(Nsstring *)string {

// if (str) {

// [soapResults addobject:string];

//// 结束解析这个元素名

//-(void)parser:(NSXMLParser *)parser didEndElement:(Nsstring *)elementName namespaceURI:(Nsstring *)namespaceURI qualifiedname:(Nsstring *)qName {

// if ([matchingElement isEqualToString: @"getUserCheck"]) {

// [self.delegate kankan:soapResults];

// }else if ([matchingElement isEqualToString: @"GetWellList_Super_AddWellType"])

// {

// [self.delegate kankan1:soapResults];

// }

//// 解析整个文件结束后

//- (void)parserDidEndDocument:(NSXMLParser *)parser {

// if (soapResults) {

// soapResults = nil;

//// 出错时,例如强制结束解析

//- (void) parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {

//}



@end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇