Obtenga el contenido XML con la biblioteca AFNetworking

ahora me gustaría usar la biblioteca AFNetworking para obtener contenido XML, así que uso este código

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

mi pregunta es saber si hay alguna forma de obtener el contenido de la respuesta xml (quiero imprimir el contenido xml con NSLog)

gracias de antemano

preguntado el 12 de junio de 12 a las 13:06

Si desea recibir un documento xml completamente instanciado, consulte esta subclase de operación de solicitud que creé github.com/shawnwall/AFGXMLRequestOperation -

2 Respuestas

Los datos sin procesar de la solicitud siempre están disponibles en el responseData propiedad de la clase de operación. Así es como lo mostrarías con 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];

Dicho esto, el estándar AFXMLRequestOperation usos de clase NSXMLParser que es doloroso de usar. Si su carga útil no es demasiado grande y el rendimiento no es un problema, le sugiero que use el nuevo Mattt AFKissXMLRequestOperation clase que hará el análisis por usted y expondrá una más amigable Documento NSXML objeto compatible:

__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];

respondido 25 mar '13, 12:03

Esta es la mejor respuesta. - capikaw

Creo que AFXMLRequestOperation es SAX Operation. Es decir, la respuesta xml no se recibe en un solo grupo (se sigue recibiendo hasta que finaliza).

Puede imprimir los datos completos recibidos imprimiendo string

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

o agregar una cadena a un ivar e imprimirlo en parserDidEndDocument

- (void) parserDidEndDocument: (NSXMLParser *)parser

Si está tratando de probar la API para ver el retorno. yo uso este metodo

[[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");
                                     }
                                     ]];

Respondido 06 Jul 12, 08:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.