在iPhone上解析Google自动完成XML

4

我正在尝试在我的应用程序中实现Google搜索自动完成,但是我遇到了一些问题。我使用UISearchBar和它的textDidChange委托方法来实现这一点。当文本发生更改时,我使用NSXmlParser读取像这样的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

但我不太确定如何做到。

1个回答

3
一般的思路是要有一个名为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:委托回调,请确保执行您需要的操作以显示它-这取决于您的解析器委托是什么对象。如果您的解析器委托是表视图控制器,则可以重新加载表格。如果它是某个请求对象,则可以回调请求的委托,执行完成块或发布通知。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接