在iOS:Tag中解析XML

在iOS:Tag中解析XML,ios,objective-c,xml,parsing,Ios,Objective C,Xml,Parsing,我有一个XML文件。 这是其中的一部分 <Placemark> <kml:name xmlns:kml="http://www.opengis.net/kml/2.2">Placename</kml:name> <kml:description xmlns:kml="http://www.opengis.net/kml/2.2"> </kml:description> <kml:Point xmln

我有一个XML文件。 这是其中的一部分

<Placemark>
    <kml:name xmlns:kml="http://www.opengis.net/kml/2.2">Placename</kml:name>
    <kml:description xmlns:kml="http://www.opengis.net/kml/2.2">
    </kml:description>
    <kml:Point xmlns:kml="http://www.opengis.net/kml/2.2">
      <kml:coordinates>121.142122637505,22.9071362429957,0</kml:coordinates>
    </kml:Point>
    <styleUrl>#ylwPng</styleUrl>
</Placemark>
但是我的代码不起作用。我的代码只能成功解析以下XML

     <Placemark>
        <name>Placename/name>
        <description></description>
        <styleUrl>#ylwPng</styleUrl>
        <Point> 
         <coordinates>121.142122637505,22.90713624299571,0</coordinates>
        </Point>
    </Placemark>

地名/名称>
#ylwPng
121.142122637505,22.90713624299571,0

我正试图修改它以适应我的XML,但我不知道如何做。

您应该添加一个实例变量来记住元素名称或字符串对象。 例如,您可以添加
NSString*\u currentElement
存储元素名称,然后在
NSXMLParserDelegate
中使用它,如下所示:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    _currentElement = elementName;
    if ([elementName isEqualToString:@"kml:name"]) {
        NSLog(@"url:%@",attributeDict[@"xmlns:kml"]);
    }
    else if ([elementName isEqualToString:@"kml:description"])
    {
        NSLog(@"url:%@",attributeDict[@"xmlns:kml"]);
    }
    else if ([elementName isEqualToString:@"kml:Point"])
    {
        NSLog(@"url:%@",attributeDict[@"xmlns:kml"]);
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if ([_currentElement isEqualToString:@"kml:coordinates"]) {
        NSLog(@"Coordinates:%@",string);
    }
    else if ([_currentElement isEqualToString:@"styleUrl"])
    {
        NSLog(@"Style:%@",string);
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{

}
上面的代码片段应该适合您

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    _currentElement = elementName;
    if ([elementName isEqualToString:@"kml:name"]) {
        NSLog(@"url:%@",attributeDict[@"xmlns:kml"]);
    }
    else if ([elementName isEqualToString:@"kml:description"])
    {
        NSLog(@"url:%@",attributeDict[@"xmlns:kml"]);
    }
    else if ([elementName isEqualToString:@"kml:Point"])
    {
        NSLog(@"url:%@",attributeDict[@"xmlns:kml"]);
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if ([_currentElement isEqualToString:@"kml:coordinates"]) {
        NSLog(@"Coordinates:%@",string);
    }
    else if ([_currentElement isEqualToString:@"styleUrl"])
    {
        NSLog(@"Style:%@",string);
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{

}