NSXML解析为iOS

问题描述:

我有这个结构的XML(KML):NSXML解析为iOS

<Document> 
<Folder> 
    <Folder> 
     <name>A -</name> 
     <Placemark> 
      <name>Afghanistan</name> 
      <description></description> 
      <Style> 
       <PolyStyle> 
        <color>aaffffff</color> 
        <colorMode>random</colorMode> 
       </PolyStyle> 
      </Style> 
      <Polygon> 
       <outerBoundaryIs> 
        <LinearRing> 
         <coordinates> 65.62729644775391,37.33319854736328,0 65.64692687988283,37.45888137817383,0</coordinates> 
        </LinearRing> 
       </outerBoundaryIs> 
      </Polygon> 
     </Placemark> 
     <Placemark> 
      <name>Albania</name> 

我试图让每一个国家和它们的坐标的名称,并将它们保存在数组。 这个给了我elementValue的“地标”和urlValue的“null”。

if ([elementName isEqualToString:@"Placemark"]){ 
    NSString *urlValue=[attributeDict valueForKey:@"name"]; 

    NSLog(@"I just found a start tag for %@ %@",elementName,urlValue); 

} 

我应该使用其他代表吗?我在这里做错了什么?

<name>不是<Placemark>的属性,它是一个子元素。您需要设置一个标志或一些此类方法,然后等待解析器通过parser:didStartElement:...再次调用委托,并将“name”作为elementName。当您在“地标”上获得parser:didEndElement:...以准备下一次迭代时,您可以再次关闭该标志。

+0

以及我如何获得名称的价值? – BlackM 2013-02-10 22:43:43

+0

'parser:foundCharacters:'将被调用至少一次,也许是几次。你累积字符,直到你击中当前元素的末尾,在这种情况下,'name'。您可能会发现使用第三方库更容易,如[TBXML](http://www.tbxml.co.uk/TBXML/TBXML_Free.html),这是专为这种解析而设计的。 – rsswtmr 2013-02-10 22:46:07

+0

所以我会使用一个全局变量作为标志并读取所有字符,当elementName = name? – BlackM 2013-02-10 22:47:57