Obtenga el contenido XML con la biblioteca AFNetworking
Frecuentes
Visto 8,167 equipos
4
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
2 Respuestas
8
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
2
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 iphone objective-c ios xml afnetworking or haz tu propia pregunta.
Si desea recibir un documento xml completamente instanciado, consulte esta subclase de operación de solicitud que creé github.com/shawnwall/AFGXMLRequestOperation - shawnwall