NSXMLParser XML 解析 解压

来源:互联网 发布:jdk1.6 for linux 编辑:程序博客网 时间:2024/05/21 09:12
#import "Http.h"@interface Http ()@end@implementation Http@synthesize requestAddr;@synthesize loginJudge;-(id)initWithRequestStyle:(HTTPREQUESTTYPE)type paramArray:(NSDictionary*)params{    paramDict = params;    finished  = NO;    //[self switchHttpUrlRequest:type];    self.requestAddr = [self switchHttpUrlRequest:type];    return self;}//url拼接与判断-(NSString *)switchHttpUrlRequest:(HTTPREQUESTTYPE)type {    NSMutableString *addr = [[[NSMutableString alloc]initWithString:@"http:XXXXXXXXXXXX"]autorelease];    ViewController *viewcontroller = [[ViewController alloc]init];    [viewcontroller autorelease];    switch (type)     {        case EPAYLOGIN:            [addr appendFormat:@"getlogin?Account=%@&Password=%@%",[paramDict objectForKey:@"useName"] ,[paramDict objectForKey:@"usePwd"]];            break;                    default:            break;    }    NSLog(@"addrHpptRequest:%@",addr);    return addr;}-(void)requestAndconnect{    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc]init] autorelease];    requestAddr = [requestAddr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    NSLog(@"requestAddr%@",requestAddr);        [request setURL:[NSURL URLWithString:requestAddr]];    [request setHTTPMethod:@"GET"];    [request setTimeoutInterval:10];    NSURLConnection *conn = [[[NSURLConnection alloc]initWithRequest:request delegate:self] autorelease];        if(conn)    {        receivedData = [[NSMutableData data] retain];         while(!finished)        {            timeout ++;            NSLog(@"outtime:%d",timeout);            if(timeout>5)            {                finished = YES;            }            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate  dateWithTimeIntervalSinceNow:1]];        }    }    else     {        NSLog(@"失败");    }    }/*- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{    finished = YES;    //etrafficAppDelegate *app =[[UIApplication sharedApplication] delegate];    //app.moudle.netWorkComplite = NO;    NSLog(@"connection error");}*/- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  {      [receivedData appendData:data];    NSLog(@"receivedDate:%@",receivedData);} - (void)connectionDidFinishLoading:(NSURLConnection *)connection {           EpayLogin *epayloginxml;    switch (curType)     {        case EPAYLOGIN:            NSLog(@"sssssss");                       epayloginxml = [[EpayLogin alloc]initWithData:receivedData];                        NSMutableArray *aa = [[NSMutableArray alloc]init];            aa = [epayloginxml beginParser];                                   NSDictionary *a = [[NSDictionary alloc]init];            a = [aa objectAtIndex:0];            NSLog(@"aaaaaaaaaa:%@",[aa objectAtIndex:0]);            NSLog(@"aa%@",[a objectForKey:@"Transreturn"]);                                    LoginJudge *test = [[LoginJudge alloc]init];            test.loginarray = aa;            self.loginJudge =[test autorelease];            NSLog(@"retainCount:%d",[self.loginJudge retainCount]);            NSLog(@"loginarray:%@",[self.loginJudge.loginarray objectAtIndex:0]);                       break;                    default:            break;    }}@end
@class LoginJudge;#import <UIKit/UIKit.h>#import <zlib.h>#import "ParserForMainReturn.h"#import "ViewController.h"#import "EpayLogin.h"#import "LoginJudge.h"enum _HttpRequestType{  EPAYLOGIN,  };typedef NSUInteger HTTPREQUESTTYPE;@interface Http : NSObject{    NSMutableData    *receivedData;    NSDictionary     *paramDict;    BOOL             finished;    HTTPREQUESTTYPE  curType;    int              timeout;}@property(nonatomic,retain)NSString *requestAddr;@property(nonatomic,retain)LoginJudge *loginJudge;-(id)initWithRequestStyle:(HTTPREQUESTTYPE)type paramArray:(NSDictionary*)params;-(NSString *)switchHttpUrlRequest:(HTTPREQUESTTYPE)type;-(void)requestAndconnect;@end

 

 

 

#import "ParserForMainReturn.h"#import "Utilities.h"#import "NSDataGZipAdditions.h"#import <zlib.h>@implementation ParserForMainReturn@synthesize data;-(id)initWithData:(NSData*)pdata {    if (!(self=[super init])) return nil;        if (self) {        self.data = pdata;        mStr = [[NSMutableString alloc]init ];     }        return self;}-(NSData*)beginParser{    parser = [[NSXMLParser alloc] initWithData:data];    [parser setDelegate:self];    [parser  setShouldProcessNamespaces:YES];     // The parser calls methods in this class    [parser parse];    [parser release];    return mData;}- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName   namespaceURI:(NSString *)namespaceURI  qualifiedName:(NSString *)qName     attributes:(NSDictionary *)attributeDict{    if ([elementName isEqualToString:@"return"]) {        mainElement = MRETURN;        return;    }       mainElement = 99;}- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{    switch (mainElement) {        case MRETURN:            [mStr appendFormat:@"%@",string ];            NSLog(@"mStr:%@",mStr);            break;                default:            break;    }}- (void)parser:(NSXMLParser *)parser  didEndElement:(NSString *)elementName   namespaceURI:(NSString *)namespaceURI  qualifiedName:(NSString *)qName{    if ([elementName isEqualToString:@"return"]) {        return;    }}- (void)parserDidEndDocument:(NSXMLParser *)parser{       NSData *unBase64 = [Utilities base64toByte:mStr];    //NSData *unBase64 = [Utilities base64toByte: retStr];    NSLog(@"len %d",[unBase64 length]);        if ([unBase64 length] == 0) {        return;    }    //mData = [NSDataGZipAdditions dataWithCompressedBytes:[unBase64 bytes] length:[unBase64 length]];    mData = [self uncompressZippedData:unBase64];      NSLog(@"mData %@",[NSString stringWithUTF8String:[mData bytes]]);    }-(NSData *)uncompressZippedData:(NSData *)compressedData  {          if ([compressedData length] == 0) return compressedData;          unsigned full_length = [compressedData length];          unsigned half_length = [compressedData length] / 2;      NSMutableData *decompressed = [NSMutableData dataWithLength: full_length + half_length];      BOOL done = NO;      int status;      z_stream strm;      strm.next_in = (Bytef *)[compressedData bytes];      strm.avail_in = [compressedData length];      strm.total_out = 0;      strm.zalloc = Z_NULL;      strm.zfree = Z_NULL;      if (inflateInit2(&strm, (15+32)) != Z_OK) return nil;      while (!done) {          // Make sure we have enough room and reset the lengths.          if (strm.total_out >= [decompressed length]) {              [decompressed increaseLengthBy: half_length];          }          strm.next_out = [decompressed mutableBytes] + strm.total_out;          strm.avail_out = [decompressed length] - strm.total_out;          // Inflate another chunk.          status = inflate (&strm, Z_SYNC_FLUSH);          if (status == Z_STREAM_END) {              done = YES;          } else if (status != Z_OK) {              break;          }              }      if (inflateEnd (&strm) != Z_OK) return nil;      // Set real length.      if (done) {          [decompressed setLength: strm.total_out];          NSLog(@"Y len:%lu",strm.total_out);        return decompressed;        //return [NSData dataWithData: decompressed];      } else {          NSLog(@"no");        return nil;      }  } -(void)dealloc{    self.data = nil;//    [countyList release];    [mStr release];    [super dealloc];}@end
#import <Foundation/Foundation.h>enum __mainElement {    MRETURN    };typedef NSUInteger _mainElement;@interface ParserForMainReturn : NSObject <NSXMLParserDelegate>{    NSData *data;    NSXMLParser *parser;    _mainElement mainElement;    NSData *mData;    NSMutableString *mStr;//    NSMutableArray *mainList;//    NSMutableDictionary *mainInfo;}@property(nonatomic,retain)NSData *data;-(id)initWithData:(NSData*)pdata ;-(NSData*)beginParser;-(NSData *)uncompressZippedData:(NSData *)compressedData ;@end

 

原创粉丝点击