如何迭代XML并创建数组?

时间:2011-01-05 17:17:33

标签: iphone objective-c arrays nsxmlparser

这就是我想要做的。我正在让用户输入一个城市,然后我插入雅虎的Placefinder。这是一个XML文件,其中“Springfield”作为测试城市输入。

http://where.yahooapis.com/geocode?city=springfield

正如您所看到的,雅虎很好地提供了它找到的城市数量。所以,接下来我想找到每个城市,选择line2line4woeid并将它们存储在一个数组中。所以,数组看起来像这样(例如两个城市)......

      -> line1
City1 -> line2
      -> woeid


      -> line1
City2 -> line2
      -> woeid

然后,我想获取此数组并将其显示在UITableView中,并隐藏WOEID。当选择其中一个城市时,我需要选择城市的WOEID并使用它。

我在考虑使用NSXMLParser的实例来执行此操作。

编辑:也许这个问题太宽泛了。也许如果我能够解析XML并添加到数组中获得一些帮助。谢谢!

3 个答案:

答案 0 :(得分:2)

Apple在他们的网站上有一个样本NSXMLParser应用程序可能对您有用:

http://developer.apple.com/library/ios/#samplecode/SeismicXML/Introduction/Intro.html

答案 1 :(得分:1)

我建议使用DOM解析器而不是NSXMLParser(基于SAX的解析器),因为这样可以更容易地构造数组。

您可以使用libxml2(包含在iPhone SDK中),TouchXMLTinyXMLTBXML

答案 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));  
}