Как обнаружить ответ HTTP, проанализировать XML и сохранить его в NSString?
-
12-09-2019 - |
Вопрос
Я пытался понять это уже несколько недель, но все еще ничего не получаю.Я использую 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-данными.Имеет смысл?