Pregunta

He estado tratando de resolver esto durante semanas y todavía sale nada. Estoy utilizando el ASIHTTPRequest y he enviado con éxito los datos a un servidor y ahora tengo que conseguir la respuesta XML, analizar y guardar los elementos entre NSString marcado para que pueda publicar en el servidor. ¿Alguien tiene una idea de cómo hacer esto?

¿Fue útil?

Solución

Si buscas en la Cómo utilizar página, creo que lo que querer hacer es poner en práctica los métodos que se pueden llamar cuando la solicitud está completa. Por ejemplo, supongamos que tiene un done: método que desea que se llamará cuando su solicitud completa. Puede establecer ese método como el selector de "acabado" en la solicitud:

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease];
[request setDelegate:self];
[request setDidFinishSelector:@selector(done:)];

Luego, más tarde, se implementa el método done::

- (void)done:(ASIHTTPRequest *)request
{
   NSString *response = [request responseString];
}

Esto es asumiendo que usted está enviando las peticiones de forma asíncrona; si está usando llamadas síncronas, sólo puede utilizar la propiedad responseString sobre la solicitud.

Otros consejos

Obtenga una copia de una biblioteca de XML para el iPhone si tiene aparte de las necesidades de análisis de XML triviales.
He usado GDataXMLNode de Google para esto antes, pero probablemente lo usaría KissXML para el trabajo futuro, ya que está más cerca NSXML (la biblioteca de manzana que no se envía para el iPhone por desgracia).

Esto es una manera de analizar la respuesta, aquí estoy en busca de errores que puede ver normalmente desde un servidor de rieles, a lo largo de las líneas de:

  <errors><error>Description of what went wrong</error></errors>

Se puede ver que consigo el objeto 'solicitud' de vuelta de la biblioteca, y alimentar la cadena de respuesta en un GDataXMLDocument.

   GDataXMLDocument* root = [[GDataXMLDocument alloc] initWithXMLString:[request responseString] options:0 error:nil];

   // Parse the error strings
   NSArray* errors = [root nodesForXPath:@"//errors/error" error:nil];

   // What is the first error string.... etc......
   NSString* firstError = [[errors objectAtIndex:0] stringValue];

La matriz devuelta aquí contiene una lista de nodos que coinciden con esa trayectoria en el XML. Si no está familiarizado con XPath, no es difícil de aprender, y útil para la extracción de datos de una respuesta XML. Llamando stringValue contra el elemento devuelto en la matriz devolverá el texto entre los elementos en el ejemplo anterior.

Por supuesto, puede rellenar un diccionario, etc., con los datos XML devueltos. Tiene sentido?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top