zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Network in Network
    cord-in-a-box 2.0 安装指南
    L2 约束的最小二乘学习法
    点估计
    递归简介
    向量的L2范数求导
    优雅的线性代数系列三
    ansible批量部署nginx
    ansible批量部署mysql
    ansible批量部署tomcat
  • 原文地址:https://www.cnblogs.com/qingjoin/p/2609745.html
Copyright © 2011-2022 走看看