2016-08-11 78 views
0

我想解析XML數據。我沒有使用XMLParser。我用下面的代碼,它以某種方式工作。我將XML解析爲JSON,並以字典格式獲得響應。下面是我的代碼 -解析XML數據目標c

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

    [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 

     NSError *jsonError; 

    if (error == nil){ 

    NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError]; 

    if (jsonError) { 

    NSLog(@"Error : %@",error); 

    failureBlock(@{@"ErrorCode": [NSString stringWithFormat: @"%ld", (long)jsonError.code], 

    @"ErrorText": jsonError.localizedDescription}); 

    } else { 

    NSLog(@"success : %@",jsonResponse); 

    successBlock(jsonResponse); 

    } 

    }else{ 

    failureBlock(@{@"ErrorCode": [NSString stringWithFormat: @"%ld", (long)error.code], 

    @"ErrorText": error.localizedDescription}); 

    } 

    }] resume]; 

雖然這是工作,但突然間,我開始收到錯誤消息像 -

ErrorCode = 3840; 
    ErrorText = "The data couldn\U2019t be read because it isn\U2019t in the correct format."; 

那麼它是如何工作的前面?有人可以請指導我如何編寫正確的XML解析。如果首先重定向到上面的代碼中繞過的登錄頁面,並且我們直接獲取XML響應,也是xml url。在應用程序中,我們擁有用於登錄的UIWebView容器,並且我們可以在每次服務調用時獲取這些Cookie。在上面的代碼中,它在工作時繞過登錄頁面並以json格式返回響應。我也試過以下代碼 -

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

    [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 

     NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithData:data]; 

     [xmlparser setDelegate:self]; 

     [xmlparser parse]; 


    }] resume]; 

然後寫了didStartElement,foundCharacters和didEndElement。但它試圖解析登錄頁面本身。如果我使用NSXMLParser,登錄頁面不會被繞過。

請幫忙,任何建議是最受歡迎的。

+0

轉換爲字符串格式'的NSString您迴應*的myString = [[NSString的頁頭] initWithData: myData編碼:NSUTF8StringEncoding]; ',NSLog日誌生成的字符串,並檢查它是否在正確的格式。 – Harsh

+0

使用http://jsonlint.com/用於JSON或http://www.xmlvalidation.com/用於驗證XML響應是否正確。 – Harsh

+0

@Harsh是的,我確實打印了數據,看起來我的第一種方法並沒有繞過登錄頁面。我改變了網址,它開始工作,但是第一種方法是解析XML的權利? –

回答

4

您也可以使用此鏈接形式的XML解析:https://github.com/nicklockwood/XMLDictionary

也試試這個代碼:

NSString *baseUrl = [NSString stringWithFormat:@"your string"]; 


NSURL * url = [NSURL URLWithString:baseUrl]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
[request setHTTPMethod:@"GET"]; 
[request setHTTPShouldHandleCookies:NO]; 

[request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 

[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
    if (error) { 
     failure(error); 
    } else if(response) 
    { 
     NSDictionary * jsonDic =[NSDictionary dictionaryWithXMLData:data]; 
     NSLog(@"Response print Hear%@",jsonDic); 

    } 
}];