私はこれを何週間も理解しようとしてきましたが、まだ何も得られません。私は ASIHTTPRequest を使用しており、データをサーバーに正常に送信しました。次に、応答 XML を取得して解析し、要素をラベル付きの各 NSString に保存して、サーバーに投稿できるようにする必要があります。誰もこれを行う方法について考えを持っていますか?
2 に答える
使い方のページを見ると、あなたがやりたいことは、リクエストが完了したときに呼び出されるメソッドを実装することだと思います。たとえば、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 ライブラリのコピーを入手してください。
これには以前に Google の GDataXMLNode を使用しましたが、今後の作業にはおそらく KissXML を使用するでしょう。
応答を解析する方法は次のとおりです。ここでは、次の行に沿って、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 データを辞書などに入力することもできます。わかる?