NSXMLParser - 捕获父母和子女信息?苹果手机

时间:2012-02-14 14:30:00

标签: iphone objective-c xml nsxmlparser

我有一个带有父子结构的xml文件,例如:

<geometry id="001-mesh" name="001">
  <mesh>
    <source id="001-mesh-positions">
      <float_array id="001-mesh-positions-array" count="228">

我能够使用NSXMLParser成功解析数据。但问题是我想存储与父项相关的子信息 - 例如,当检测到几何id时,我想存储关联的源id和float_array id。

任何人都可以建议我这样做吗?下面的代码将检测解析期间何时找到给定元素,但我不确定如何存储值。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
attributes:(NSDictionary *)attributeDict {

// NSLog(@"Parse Started");
//NSLog(@"Element Name is %@", elementName);

if([elementName isEqualToString:@"geometry"]) { 
    NSLog(@"Object Detected");
    NSString *name = [attributeDict objectForKey:@"name"];

NSLog(@"Name is %@",name);
}

if ([elementName isEqualToString:@"float_array"]) {
    NSLog(@"Vertices Detected");
    NSString * vertices = [attributeDict objectForKey:@"count"];

    NSLog(@"Vertices are %@", vertices);
}

}

2 个答案:

答案 0 :(得分:0)

在解析器检测到geometry标记时,源标识和float_array标识不可用:它们尚未被解析。通常的技巧是等待子元素,并在可用时进行处理。您可以通过创建新的Geometry对象(或与模型中的XML geometry标记对应的任何对象)来实现,并将其提供给didStartElement:...:方法,例如将其设置为一个叫做myGeometry的伊娃。检测到float_array元素后,解析其id,然后调用

[myGeometry setId:floatArrayId];

答案 1 :(得分:0)

使用类变量全局变量来保存几何id的当前值。