Я пытался понять это в течение нескольких недель, и я до сих пор ничего не получаю. Я использую ASIHTTPRequest, и ive успешно отправил данные на сервер, и теперь мне нужно получить ответ XML, проанализировать его и сохранить элементы для каждого помеченного NSString, чтобы я мог опубликовать его на сервере. Кто-нибудь имеет представление о том, как это сделать?Как определить ответ HTTP, проанализировать xml и сохранить в NSString?
ответ
От взгляда на странице How to Use, я думаю, что вы хотите реализовать методы, которые можно вызвать, когда запрос будет завершен. Например, скажем, у вас есть метод 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
по запросу.
спасибо. его работа сейчас – timothy5216
Ошибка в коде выше. Должен быть @selector (requestDone), просто говоря. – Jordan
@ Иордан - спасибо, исправлено – Tim
Получите копию библиотеки 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. Имеют смысл?
Да, это имеет смысл. Я получил его сейчас – timothy5216
Я пробовал это, и он не анализирует XML, он просто возвращает null – timothy5216
ждать, не возражайте. Я забыл изменить nodeForXPath – timothy5216
Не могли бы вы дать образец кода? –