我有一个带有父子结构的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);
}
}
答案 0 :(得分:0)
在解析器检测到geometry
标记时,源标识和float_array标识不可用:它们尚未被解析。通常的技巧是等待子元素,并在可用时进行处理。您可以通过创建新的Geometry
对象(或与模型中的XML geometry
标记对应的任何对象)来实现,并将其提供给didStartElement:...:
方法,例如将其设置为一个叫做myGeometry
的伊娃。检测到float_array
元素后,解析其id
,然后调用
[myGeometry setId:floatArrayId];
答案 1 :(得分:0)
使用类变量或全局变量来保存几何id的当前值。