Как обнаружить ответ HTTP, проанализировать XML и сохранить его в NSString?

StackOverflow https://stackoverflow.com/questions/1456076

Вопрос

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

Это было полезно?

Решение

Глядя на Как использовать страница, я думаю, что вы хотите реализовать методы, которые можно будет вызвать после завершения запроса.Например, предположим, что у вас есть метод 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 имущество по запросу.

Другие советы

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

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

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

Вы можете видеть, что я получаю объект «запрос» обратно из библиотеки и передаю строку ответа в 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-данными.Имеет смысл?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top