2011-03-23 5 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

사전을 채울 때 키의 개체를 설정합니다. dictionay에서 객체를 가져 오려면 키가 있어야합니다. 그리고 그것이 당신 문제라고 생각합니다.

당신은 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]; 
    } 
} 

방법에 사용되는 논리의 생각 문제가되면이 아이디어를 따르고 콘솔에 대한 응답을 확인하십시오. 나는 해결책을 찾을 것이라고 확신합니다.

의심이나 쿼리가 있으면 다시 방문하십시오.

관련 문제