2014-12-04 73 views
1

我想讀取來自Web服務的響應。AFNetworking 2.0不解析xml

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer=[AFXMLParserResponseSerializer new]; 
[manager GET:@"http://openapi.aibang.com/search?app_key=f41c8afccc586de03a99c86097e98ccb&city=%E5%8C%97%E4%BA%AC&q=%E9%A4%90%E9%A6%86" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"%@",responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

但是我只從Xcode日誌中獲得<NSXMLParser: 0x15d85490>。這不是正確的XML響應。

回答

1

EN:由於responseObjectNSXMLParser例如,你不能把它像串! 您必須實施NSXMLParserDelegate才能處理xml解析器的進度!

CN:responseObject返回的是NSXMLParser實例,你必須實現NSXMLParserDelegate協議才能處理該xml字符串!騷年! :-)

解決方案1:使用的NSXMLParser來解析器

[manager GET:@"http://openapi.aibang.com/search?app_key=f41c8afccc586de03a99c86097e98ccb&city=%E5%8C%97%E4%BA%AC&q=%E9%A4%90%E9%A6%86" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSXMLParser *XMLParser = (NSXMLParser *)responseObject; 
    [XMLParser setShouldProcessNamespaces:YES]; 
    XMLParser.delegate = self; 
    [XMLParser parse]; 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

解決方案2:使用GDataXML到解析器(很容易)

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
[manager GET:@"http://openapi.aibang.com/search?app_key=f41c8afccc586de03a99c86097e98ccb&city=%E5%8C%97%E4%BA%AC&q=%E9%A4%90%E9%A6%86" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:responseObject encoding:0 error:nil]; 
    NSLog(@"%@",doc.rootElement); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 
+0

謝謝。我決定還是儘量用json吧,xml看起來好麻煩。 – 2014-12-04 14:31:55

2

輸出正確,在iOS上只有NSXMLParser這是一個sax解析器,您將需要實現sax解析。 塊中返回的對象是NSXMLParser的實例,這就是您在日誌語句中看到的內容,其中的對象是解析從HTTP請求返回的數據的對象。通過它自我處理與NSXMLParserDelegate

如果你想要DOM解析,你可以使用ONO XML解析器,它是由AFNetworking的開發者製作的,它是一個DOM解析器。 當然也有很不錯的整合與AFNetworkingAFOnoResponseSerializer

+0

謝謝。 ONO看起來像一個很好的XML解析器。 – 2014-12-04 14:51:30

+0

我只用過一次,我更喜歡JSON,但是它確實做到了您所期望的一切。包括XPath和與AFNetworking的完美集成。 – rckoenes 2014-12-04 14:55:50