Pergunta

Eu venho tentando descobrir isso por semanas e eu ainda não recebem nada. Eu estou usando o ASIHTTPRequest e ive enviada com sucesso os dados para um servidor e agora eu preciso para obter o XML de resposta, analisá-lo e salvar os elementos para cada NSString rotulados para que eu possa publicá-la para o servidor. Alguém tem uma idéia de como fazer isso?

Foi útil?

Solução

De olhar para o Como página Use , eu acho que você quer fazer é implementar métodos que podem ser chamados quando o pedido está completo. Por exemplo, digamos que você tem um done: método que você quer ser chamado quando seus concluída pedido. Você pode definir esse método como o seu selector "acabado" no pedido:

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

Então, mais tarde, você implementar o método done::

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

Isso tudo é supondo que você está enviando os pedidos de forma assíncrona; se você estiver usando chamadas síncronas, você pode simplesmente usar a propriedade responseString sobre o pedido.

Outras dicas

Obter uma cópia de uma biblioteca XML para o iPhone se você tiver outra do que as necessidades de análise de XML triviais.
Eu usei GDataXMLNode do Google para isso antes, mas eu provavelmente usaria KissXML para o trabalho futuro, porque é mais perto NSXML (a biblioteca da Apple, que não é fornecido para o iphone infelizmente).

Aqui está uma maneira de analisar a resposta, aqui eu estou procurando erros que você pode normalmente ver a partir de um servidor Rails, ao longo das linhas de:

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

Você pode ver que eu recebo o 'pedido' objeto de volta a partir da biblioteca, e eu alimentar a cadeia de resposta em um 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];

A matriz retornada aqui contém uma lista de nós que correspondem a esse caminho no XML. Se você não estiver familiarizado com XPath, não é difícil de aprender, e útil para extrair dados de uma resposta XML. Chamando stringValue contra o elemento retornado na matriz irá retornar o texto entre os elementos no exemplo acima.

Você pode, naturalmente, preencher um dicionário, etc. com os dados XML retornados. Faz sentido?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top