这就是我想要做的。我正在让用户输入一个城市,然后我插入雅虎的Placefinder。这是一个XML文件,其中“Springfield”作为测试城市输入。
http://where.yahooapis.com/geocode?city=springfield
正如您所看到的,雅虎很好地提供了它找到的城市数量。所以,接下来我想找到每个城市,选择line2
,line4
和woeid
并将它们存储在一个数组中。所以,数组看起来像这样(例如两个城市)......
-> line1
City1 -> line2
-> woeid
-> line1
City2 -> line2
-> woeid
然后,我想获取此数组并将其显示在UITableView
中,并隐藏WOEID。当选择其中一个城市时,我需要选择城市的WOEID并使用它。
我在考虑使用NSXMLParser
的实例来执行此操作。
编辑:也许这个问题太宽泛了。也许如果我能够解析XML并添加到数组中获得一些帮助。谢谢!
答案 0 :(得分:2)
Apple在他们的网站上有一个样本NSXMLParser
应用程序可能对您有用:
http://developer.apple.com/library/ios/#samplecode/SeismicXML/Introduction/Intro.html
答案 1 :(得分:1)
我建议使用DOM解析器而不是NSXMLParser
(基于SAX的解析器),因为这样可以更容易地构造数组。
答案 2 :(得分:0)
这就是我最终做的事情。如果他们遇到同样的问题,请在此处发帖以帮助其他人。的 Here 强> is a sample XML that could be parsed using this method.
-(void)someMethod {
TBXML *tbxml = [[TBXML tbxmlWithURL:YOURURLHERE] retain];
cityArray = [NSMutableArray array];
[cityArray retain];
if (tbxml.rootXMLElement)
[self traverseElement:tbxml.rootXMLElement];
[tbxml release];
}
- (void)traverseElement:(TBXMLElement *)element {
do {
if ([[TBXML elementName:element] isEqualToString:@"Found"]) {
NSLog(@"Number of found items: %@",[TBXML textForElement:element]);
}
if (element->firstChild)
[self traverseElement:element->firstChild];
if ([[TBXML elementName:element] isEqualToString:@"Result"]) {
TBXMLElement *cityName = [TBXML childElementNamed:@"line2" parentElement:element];
TBXMLElement *country = [TBXML childElementNamed:@"country" parentElement:element];
TBXMLElement *woeid = [TBXML childElementNamed:@"woeid" parentElement:element];
NSArray *city = [NSArray arrayWithObjects:[TBXML textForElement:cityName],
[TBXML textForElement:country],
[TBXML textForElement:woeid],nil];
[cityArray addObject:city];
}
// Obtain next sibling element
} while ((element = element->nextSibling));
}