在iPhone上解析Google自动填充XML

在iPhone上解析Google自动填充XML

问题描述:

我试图让Google搜索自动填充在我的应用中工作,但我遇到了一些麻烦。我正在使用UISearchBar,它的代理方法是textDidChange。当文本的变化,我用NSXmlParser阅读这样一个XML文件:在iPhone上解析Google自动填充XML

<toplevel> 
<CompleteSuggestion> 
<suggestion data="searchterms"/> 
<num_queries int="13400000"/> 
</CompleteSuggestion> 
<CompleteSuggestion> 
<suggestion data="searchterms twitter"/> 
<num_queries int="52500000"/> 
</CompleteSuggestion> 
</toplevel> 

http://suggestqueries.google.com/complete/search?client=toolbar&q=SEARCHTERM

凡SEARCHTERM将是文本的UISearchBar。这将返回一个XML文件,然后,我会分析发现使用

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict

建议的词,但我不太清楚如何。

一般的想法是有一个searchSuggestions可变数组属性。在parserDidStartDocument:方法中,确保将它初始化为一个新的空数组 - 类似self.searchSuggestions = [NSMutableArray array];

然后,在您的didStartElement委托方法中,执行此操作以获取每个建议的项目。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    if ([elementName isEqualToString:@"suggestion"]) { 
     NSString *suggestion = attributeDict[@"data"]; 
     [self.searchSuggestions addObject:suggestion]; 
    } 
} 

一旦你的parserDidEndDocument:委托的回调,请务必做你需要做的,显示它 - 这取决于哪个对象是您的解析器委托。如果您的解析器的委托是一个表视图控制器,您可以重新加载表。如果它是某个请求对象,则可以调用请求的委托,执行完成块或发布通知。

+0

美丽,非常感谢! – JohnWickham 2013-03-03 03:46:29