Как определить ответ HTTP, разобрать xml и сохранить в NSString? - PullRequest
1 голос
/ 21 сентября 2009

Я пытался понять это неделями, но до сих пор ничего не получаю. Я использую ASIHTTPRequest, и я успешно отправил данные на сервер, и теперь мне нужно получить ответный XML, проанализировать его и сохранить элементы для каждой помеченной строки NSString, чтобы я мог опубликовать ее на сервере. У кого-нибудь есть идеи как это сделать?

Ответы [ 2 ]

4 голосов
/ 21 сентября 2009

Изучив страницу Как использовать , я думаю, что вам нужно реализовать методы, которые могут быть вызваны после завершения запроса. Например, скажем, у вас есть метод done:, который вы хотите вызвать по завершении вашего запроса. Вы можете установить этот метод в качестве «законченного» селектора по запросу:

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

Затем вы реализуете метод done::

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

Это все при условии, что вы отправляете запросы асинхронно; если вы используете синхронные вызовы, вы можете просто использовать свойство responseString в запросе.

2 голосов
/ 21 сентября 2009

Получите копию библиотеки XML для iPhone, если у вас есть другие потребности в разборе XML.
Я использовал для этого GDataXMLNode от Google, но, вероятно, я буду использовать KissXML для будущей работы, потому что он ближе к NSXML (библиотека Apple, которая, к сожалению, не поставляется для iphone).

Вот способ разобрать ответ, здесь я ищу ошибки, которые вы обычно можете видеть на сервере Rails, в следующем виде:

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

Вы можете видеть, что я получаю объект 'request' из библиотеки и передаю строку ответа в 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];

Возвращенный массив здесь содержит список узлов, которые соответствуют этому пути в XML. Если вы не знакомы с XPath, его не сложно изучить, и он полезен для извлечения данных из XML-ответа. Вызов stringValue для элемента, возвращенного в массиве, вернет текст между элементами в примере выше.

Конечно, вы можете заполнить словарь и т. Д. Возвращенными данными XML. Имеет смысл?

...