當前我正在爲我的iOS應用程序編寫一個在線登錄,我做了一些關於應該使用什麼庫來處理HTTP請求和XML解析的研究。我結束了AFNetworking和KissXML。我還使用KissXML添加AFNetworking。對網站的請求是成功的,但我有點卡在解析收到的XML。從網站解析XML響應
的迴應是這樣的:
<login>
<response status="success" result="correct"/>
<data>
<username>testusername</username>
<country>Germany</country>
</data>
</login>
在我的代碼做一個HTTPRequest,該網站收到的XML,然後嘗試檢查userdatas是有效還是無效。如果他們是有效的,我想收到像用戶名和國家元素。但是如果發生錯誤,我想把它還給你。我的代碼sofar:
{
__block BOOL success = NO;
__block NSError *localerror = nil;
__block NSString *domain = @"de.FranzBusch.Searchlight.ErrorDomain";
//HTTP Request
NSURL *url = [NSURL URLWithString:@"http://www.example.de/login.php"];
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:url];
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
email, @"email",
password, @"password", nil];
NSMutableURLRequest *request = [client requestWithMethod:@"POST" path:@"" parameters:params];
//Parse XML-Response
AFKissXMLRequestOperation *operation = [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *XMLDocument)
{
NSArray *resultNodes = nil;
NSError *responseError = nil;
resultNodes = [XMLDocument nodesForXPath:@"//response" error:&responseError];
if (responseError || ([resultNodes count] != 1))
{
localerror = [NSError errorWithDomain:domain code:-101 userInfo:[self generateErrorDictionary:@"XMLError"]];
success = NO;
}
else
{
for (DDXMLElement *element in resultNodes)
{
DDXMLNode *node = [element attributeForName:@"status"];
NSString *status = [node stringValue];
if ([status isEqualToString:@"fail"])
{
success = NO;
localerror = [NSError errorWithDomain:domain code:-101 userInfo:[self generateErrorDictionary:[[element attributeForName:@"result"] stringValue]]];
}
else
{
NSError *usernameError = nil;
NSArray *dataNodes = [XMLDocument nodesForXPath:@"//data//username" error:&usernameError];
if (usernameError || ([dataNodes count] != 1))
{
localerror = [NSError errorWithDomain:domain code:-101 userInfo:[self generateErrorDictionary:@"XMLError"]];
success = NO;
}
else
{
for (DDXMLELement *dataElement in dataNodes)
{
}
}
}
}
}
}failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, DDXMLDocument *XMLDocument)
{
NSLog(@"failure");
}];
[operation start];
return success;
}
任何人都可以告訴我如何改善代碼,以及如何做到這一點。因爲如果我想將localerror分配給錯誤,我總是會得到一個錯誤:(
您是否曾經使用AFNetwork和KissXML找到您的解決方案,或者您是否回答了下面的問題?如果可以,請與KissXML/AFNetwork分享您的結論 –