如何通过解析我的XML文件来检索值

问题描述:

我试图从XML文件中收集数据并将其添加到数组中。数据看起来是这样的..如何通过解析我的XML文件来检索值

<Placemark> 
<name><![CDATA[Kingsway (Start)]]></name> 
<description><![CDATA[]]></description> 
<TimeStamp><when>2014-04-30T17:03:28.681Z</when></TimeStamp> 
<styleUrl>#start</styleUrl> 
<Point> 
<coordinates>-1.408894,52.13977,176.0</coordinates> 
</Point> 
</Placemark> 
<Placemark id="tour"> 
<name><![CDATA[Kingsway]]></name> 
<description><![CDATA[]]></description> 
<styleUrl>#track</styleUrl> 
<ExtendedData> 
<Data name="type"><value><![CDATA[running]]></value></Data> 
</ExtendedData> 
<gx:MultiTrack> 
<altitudeMode>absolute</altitudeMode> 
<gx:interpolate>1</gx:interpolate> 
<gx:Track> 
<when>2014-04-30T17:03:28.681Z</when> 
<gx:coord>-1.408894 52.13977 176.0</gx:coord> 
<when>2014-04-30T17:03:31.071Z</when> 
<gx:coord>-1.407839 52.139166 174.0</gx:coord> 
<when>2014-04-30T17:03:32.070Z</when> 
<gx:coord>-1.407486 52.138963 175.0</gx:coord> 
<when>2014-04-30T17:03:33.073Z</when> 
<gx:coord>-1.407142 52.138755 174.0</gx:coord> 
<when>2014-04-30T17:03:34.073Z</when> 
<gx:coord>-1.406805 52.138555 173.0</gx:coord> 
<when>2014-04-30T17:03:35.073Z</when> 
<gx:coord>-1.40663 52.138441 173.0</gx:coord> 
<when>2014-04-30T17:03:36.601Z</when> 
<gx:coord>-1.405929 52.138027 172.0</gx:coord> 
<when>2014-04-30T17:03:37.601Z</when> 
<gx:coord>-1.405574 52.137817 172.0</gx:coord> 

我只是在下面的标签GX值感兴趣:坐标,所以我用下面的代码解析文件。

- (void)loadMap:(NSInteger)selJourney 
{ 
    NSString *journey = @"KML_Sample"; 
    NSString *path = [[NSBundle mainBundle] pathForResource:journey ofType:@"kml"]; 
    [self parseXMLFile:path]; 
} 

- (void)parseXMLFile:(NSString *)pathToFile 
{ 
    NSXMLParser *addressParser; 

    [myParser setShouldProcessNamespaces:NO]; 
    [myParser setShouldReportNamespacePrefixes:NO]; 
    [myParser setShouldResolveExternalEntities:NO]; 

    NSURL *xmlURL = [NSURL fileURLWithPath:pathToFile]; 
    myParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
    [myParser setDelegate:self]; 
    [myParser setShouldResolveExternalEntities:YES]; 
    [myParser parse]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementName isEqualToString:@"gx:coord"]) { 
     polylineList = [[NSMutableArray alloc] init]; 
    } 
} 

当解析器方法运行,它会找出正确的ElementName我想要的标签后检索字符串数据并将其添加到我的NSMutableArray polylineList。 解析器中的其他参数都返回零,所以我错过了什么?

+0

在didStartElement方法中,每次调用它时都会分配一个全新的数组,并且永远不会向任何数组添加任何内容。好像你只想在一个地方分配一个数组,然后每当你找到一个gx:coord元素时就添加到该数组中!尝试并重新发布。 – RobP 2014-11-24 18:35:15

+0

是的,我意识到,也许我应该离开这条线。总的来说,我想知道(正如我在我的问题中所说),如何从这种方法中检索值 – user616076 2014-11-25 10:03:23

+0

不要使用这些类型的单词。请删除这些评论。谢谢。 +1为好的答案。 – Pawan 2014-11-25 11:33:42

我设法用下面

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if ((addRec) && (![string isEqualToString:@"\n"])) 
    { 
     NSArray *tmpArray = [[NSArray alloc] initWithObjects:string, nil]; 
     if (polylineList.count > 0) 
      [polylineList addObject:string]; 
     else 
      polylineList = [[NSMutableArray alloc] initWithArray:tmpArray]; 
    } 
} 

我希望这是帮助那些谁使用KML,MapKit或者只是解析XML的方法来解决这个自己。