Использование словарей с XML (iphone / iOs) - PullRequest
1 голос
/ 23 марта 2011

Я хочу проанализировать данные из XML-файла.Пока это работает, но я не могу найти правильный способ получения данных из словаря.

Мой анализатор выглядит следующим образом

    - (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);
    }

Как вы можете видеть.Данные хранятся в словаре, и этот словарь хранится в массиве.Единственная проблема ... ключом словаря всегда являются координаты.Это выглядит довольно логично для меня ... но я не нахожу логику для правильной реализации.Может кто-нибудь взглянуть?

Спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 23 марта 2011

Я думаю, что проблема, с которой вы сталкиваетесь, заключается в логике, которую вы использовали в методе

- (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];
    }
}

, то есть выделении метки placemarkData, которая будет работать нормально, если элемент Placemark встречается в первый раз, но для следующей итерации.будет проблема, следуйте этой идее и посмотрите ответ на консоли, я уверен, что вы найдете решение.

вернитесь, если возникнут сомнения или запрос в этом.

0 голосов
/ 23 марта 2011

Когда вы заполняете словарь, вы устанавливаете объекты для ключей. Чтобы получить объект из словаря, вам нужен ключ. И я думаю, что это твоя проблема.

Чтобы вывести список ключей в вашем словаре, вы можете использовать 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, вы можете получить к ним доступ с помощью этой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...