NSXMLParser XML 解析 解压

#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

 

你可能感兴趣的:(parser)