NSXMLParser Три одинаковых элемента - PullRequest
2 голосов
/ 24 декабря 2010

Я использую NSXMLParser для разбора этого XML: http://itunes.apple.com/gb/rss/topsongs/limit=50/explicit=true/xml. Я пытаюсь проанализировать элемент с именем "im: image". Моя проблема в том, что есть три элемента с именем «im: image». Как я могу только проанализировать данные из второго «im: image», или как я могу добавить каждый отдельный в массив?

Ответы [ 2 ]

2 голосов
/ 24 декабря 2010

Вероятно, это не лучший способ сделать это, но когда что-то подобное произошло со мной, я просто создал NSInteger с именем counter. Затем в didStartElement я сделал это: (я искал второй элемент в моем случае)

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict {

 if([elementName isEqualToString:@"yweather:forecast"])
    {
        int code = [[attributeDict objectForKey:@"code"] intValue];
        if (counter == 0) {
        }
        if (counter == 1) {
            conditionCode = code;
        }
        counter ++; 
    }
}
1 голос
/ 24 декабря 2010

В методе didStartElement вашего пользовательского делегата установите флажок attributes и убедитесь, что для height установлено значение 60 (каждый из «одинаковых» элементов XML имеет свой атрибут высоты). attributes - это NSDictionary с ключами для имени атрибутов и значениями для значений атрибутов. Вот пример того, как бы вы это сделали:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
  if ([[attributeDict objectForKey:@"height"] isEqualToString:@"60"]) {
    NSLog(@"store");
  }
}
...