Wie erkenne ich eine HTTP-Antwort, die XML analysieren und zu einem NSString retten?
-
12-09-2019 - |
Frage
Ich habe versucht, dies für Wochen, um herauszufinden, und ich immer noch nichts. Ich bin mit dem ASIHTTPRequest und ive gesendet erfolgreich die Daten an einen Server und jetzt muss ich die Antwort XML erhalten, analysieren sie und die Elemente zu jedem markierten NSString speichern, so kann ich sie an den Server senden. Hat jemand eine Idee hat, wie dies zu tun?
Lösung
Aus im Wie Seite nutzen zu können, denke ich, was Sie tun möchten, ist Methoden zu implementieren, die aufgerufen werden können, wenn die Anforderung abgeschlossen ist. Zum Beispiel, sagen Sie eine Methode done:
, die Sie genannt werden möchten, wenn Ihre Anfrage abgeschlossen ist. Sie können diese Methode als „fertig“ Selektor auf Antrag gesetzt:
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease];
[request setDelegate:self];
[request setDidFinishSelector:@selector(done:)];
Dann später implementieren Sie die done:
Methode:
- (void)done:(ASIHTTPRequest *)request
{
NSString *response = [request responseString];
}
Das ist alles, vorausgesetzt, Sie sind die Anforderungen asynchron sind zu senden; wenn Sie synchrone Anrufe verwenden, können Sie nur die responseString
Eigenschaft auf Wunsch verwendet werden.
Andere Tipps
Hier finden Sie eine Kopie einer XML-Bibliothek für das iPhone, wenn Sie andere haben als trivial XML-Parsing Bedürfnisse.
Ich habe vor Googles GDataXMLNode dafür verwendet, aber ich würde wahrscheinlich KissXML für die zukünftige Arbeit, weil es näher NSXML ist (die Apple-Bibliothek, die leider nicht für die iPhone versenden).
Hier ist ein Weg, um die Antwort zu parsen, hier suche ich Fehler Sie in der Regel von einem Rails-Server sehen könnten, entlang der Linien von:
<errors><error>Description of what went wrong</error></errors>
Sie sehen, dass ich das ‚Antrag‘ Objekt wieder aus der Bibliothek, und ich füttere die Antwortzeichenfolge in eine 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];
Das zurückgegebene Array enthält hier eine Liste von Knoten, die diesen Pfad in der XML übereinstimmen. Wenn Sie mit XPath nicht vertraut sind, ist es nicht schwer zu lernen, und nützlich für die Daten aus einer XML-Antwort zu ziehen. Aufrufe String gegen das Element in dem Array zurückgegeben wird den Text zwischen den Elementen in dem obigen Beispiel zurück.
Sie können natürlich bevölkern ein Wörterbuch, usw. mit den zurückgegebenen XML-Daten. Sinn machen?