2011-03-23 65 views
1

我想解析xml文件中的數據。這是迄今爲止的工作,但我沒有找到從字典中獲取數據的正確方法。使用XML字典(iphone/iOs)

我的解析器看起來如下

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
    attributes:(NSDictionary *)attributeDict{ 
    currentElement = [elementName copy]; 
    if ([elementName isEqualToString:@"Placemark"]) { 
     placemarkData = [[NSMutableDictionary alloc] init]; 
     currentTitle = [[NSMutableString alloc] init]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    if ([currentElement isEqualToString:@"name"] || [currentElement isEqualToString:@"address"] || [currentElement isEqualToString:@"coordinates"]) 
     [currentTitle appendString:string]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName{ 
    if ([elementName isEqualToString:@"Placemark"]) { 
     [placemarkData setObject:currentTitle forKey:currentElement]; 
     [Placemarks addObject:[placemarkData copy]]; 
     NSLog(@"adding story: %@", currentElement); 
    } 

正如你所看到的。數據存儲在字典中,並且該字典存儲在數組中。唯一的問題是...字典的關鍵始終是座標。這對我來說有點合乎邏輯...但是我沒有找到正確實施它的邏輯。有人可以看看嗎?

Thnx提前!

回答

0

填充字典時,可以設置鍵的對象。爲了從詞典中獲得物品,你需要擁有鑰匙。我認爲這是你的問題。

要列出的鑰匙,你的字典裏,你可以使用一個keyEnumerator:

NSEnumerator *enumerator = [myDictionary keyEnumerator]; 
id key; 

while ((key = [enumerator nextObject])) { 

    /* code that uses the returned key */ 
    NSString *theElement = key; 
    NSLog(@"Element: %@", theElement); 
} 

有了這個代碼,你會列出所有的鑰匙。要使用鍵找到對象,請使用[myDictionary objectForKey:key];。如果您知道XML中的元素,則可以使用此行來訪問它們。

0

我認爲你所面對的問題是,因爲分配placemarkData將正常工作,如果要素標遇到第一次,但爲下一次迭代將有你在

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
    attributes:(NSDictionary *)attributeDict{ 
    currentElement = [elementName copy]; 
    if ([elementName isEqualToString:@"Placemark"]) { 
     placemarkData = [[NSMutableDictionary alloc] init]; 
     currentTitle = [[NSMutableString alloc] init]; 
    } 
} 

方法所使用的邏輯,即有問題,請遵循這個想法,並看到控制檯的響應,我相信你會找到解決方案。

如果有任何疑問或疑問,請回來。