2012-02-14 11 views
1

我有一個父子結構的XML文件,例如:NSXMLParser - 捕獲父級和子級信息? iPhone

<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

在當分析器檢測geometry標籤時,源ID和float_array ID不可用:他們還沒有被解析。通常的技巧是等待子元素,並在處理可用時進行處理。你可以創建一個新的Geometry對象(或任何對應於你的模型中的XML的geometry標籤),並使其可用於didStartElement:...:方法,例如將其設置爲名爲myGeometry的伊娃。一旦你發現float_array元素,解析其id,並調用

[myGeometry setId:floatArrayId]; 
+0

感謝 - 但問題這裏是xml文件中其他父項下的float_array標記的其他實例。我只想創建一個對象,如果父母是幾何。這可能嗎? – GuybrushThreepwood 2012-02-14 14:40:05

+0

@Ohnomycoco絕對:在did end元素方法中添加代碼以將'myGeometry'設置爲'nil'。 – dasblinkenlight 2012-02-14 14:47:05

0

使用無論是類變量全局變量持有幾何Id的電流值..