2012-06-12 1 views
4

Теперь я хотел бы использовать AFNetworking библиотеку, чтобы получить содержимое XML, поэтому я использую этот кодПолучить содержимое XML с AFNetworking библиотеки

AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request 
success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) 
{ 
    XMLParser.delegate = self; 
    [XMLParser parse]; 
} 
failure:nil]; 
[operation start]; 

мой вопрос, чтобы знать, есть ли способ, чтобы получить содержание ответ XML (я хочу, чтобы напечатать содержимое XML с NSLog)

заранее спасибо

+3

Если вы хотите для получения полностью созданного документа xml проверьте этот подпроцесс операции запроса, который я создал https://github.com/shawnwall/AFGXMLRequestOperation – shawnwall

ответ

7

Необработанные данные из запроса всегда доступны в responseData свойства класса операции. Вот как вы бы показать его с NSLog:

__block AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://legalindexes.indoff.com/sitemap.xml"]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) { 
    NSLog(@"Parser: %@", XMLParser); 
    NSLog(@"Raw XML Data: %@", [[NSString alloc] initWithData:operation.responseData encoding:NSUTF8StringEncoding]); 
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) { 
    NSLog(@"Failure!"); 
}]; 

[operation start]; 

Тем не менее, стандартный AFXMLRequestOperation класс использует NSXMLParser, который является болезненным для использования. Если полезная нагрузка не слишком велика и производительность не является проблемой, я предлагаю вам использовать новый AFKissXMLRequestOperation класс Mattt, который будет делать синтаксический разбор для вас и разоблачить дружественный NSXMLDocument совместимый объект:

__block AFKissXMLRequestOperation *operation = [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://legalindexes.indoff.com/sitemap.xml"]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *XMLDocument) { 
    NSLog(@"XMLDocument: %@", XMLDocument); 
    NSLog(@"Raw XML Data: %@", [[NSString alloc] initWithData:operation.responseData encoding:NSUTF8StringEncoding]); 
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, DDXMLDocument *XMLDocument) { 
    NSLog(@"Failure!"); 
}]; 

[operation start]; 
+0

Это лучший ответ. – capikaw

2

Я считаю, что AFXMLRequestOperation является SAX операции. I.e., xml-ответ не принимается в одной связке (он продолжает получать до его завершения).

Вы можете распечатать полные данные, полученные путем печати string

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 

или добавления строки в Ивар и распечатать его на parserDidEndDocument

- (void) parserDidEndDocument: (NSXMLParser *)parser 

Если вы пытаетесь проверить апи, чтобы увидеть вернуть. Я использую этот метод

[[AFHTTPClient sharedClient] postPath:url 
           parameters:nil 
           success:^(AFHTTPRequestOperation *operation , id responseObject) { 
            NSLog(@"responseobject: %@", [responseObject description]); 
            } 
            failure:^(AFHTTPRequestOperation *operation , NSError *error){ 
             NSLog(@"Handle failure for me"); 
            } 
            ]]; 
Смежные вопросы