Как проанализировать xml с помощью nsxmlparser с одинаковыми именами нескольких узлов в программировании iphone?

#iphone #nsxmlparser

#iPhone #nsxmlparser

Вопрос:

Как я могу проанализировать с помощью NSXMLParser, если мне нужны все изображения,

 <title>Title</title>
<description>my description is here </description>

<images>

<image>http://www.sosmoths.com/mothImages/800px-Tineola.bisselliella.7218.jpg</image>

<image>http://www.sosmoths.com/mothImages/800px-Tineola.bisselliella.mounted.jpg</image>

<image>http://www.sosmoths.com/mothImages/800px-XN_Tineola_bisselliella_1.jpg</image>

<image>http://www.sosmoths.com/mothImages/Tineola_bisselliella.JPG</image>

</images>
  

Есть больше узлов, таких как title, description, так как анализировать такой xml, меня смущают узлы изображений, я думаю использовать NSMutableArray для этого, но все еще не ясно, как делать код?

Комментарии:

1. sosmoths.com/.xml/moths.xml

2. Это XML ROM, теперь, что я могу сделать, я хочу использовать NSXMLParser, а не TouchXML или любой другой @Ron

Ответ №1:

 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
                                  namespaceURI:(NSString *)namespaceURI
                                 qualifiedName:(NSString *)qName
  

{

 if ([elementName isEqualToString:"<image>"])
        {
            [imagearray addObject:imageurl];

        }
  

}

Перед этим вам нужно найти имя элемента, а затем выполнить приведенный выше код.Это может вам помочь.

Комментарии:

1. но где инициализировать массив изображений?

2. Вы можете использовать его в initWithData: метод. Означает, когда вы передаете свой запрос.

Ответ №2:

 use this it work

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
    NSLog(@"%@",elementName);
    if([elementName isEqualToString:@"moths"]){
        mytblarray=[[NSMutableArray alloc] init];
    } else if([elementName isEqualToString:@"moth"]){
        tmpdic=[[NSMutableDictionary alloc] init];
    }
    else if([elementName isEqualToString:@"images"]){
        imgArray=[[NSMutableArray alloc] init];
    }

}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    if(tmpstr!=nil amp;amp; [tmpstr retainCount]>0){ [tmpstr release]; tmpstr=nil; }
    tmpstr=[[NSString alloc] initWithString:string];

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    if([elementName isEqualToString:@"moth"]){
        [mytblarray addObject:tmpdic];
        [tmpdic release];
    }if([elementName isEqualToString:@"images"]){
        [tmpdic setValue:imgArray forKey:elementName];
    }
    else if([elementName isEqualToString:@"image"]){
        [imgArray addObject:tmpstr];        
    }
}
  

Комментарии:

1. Спасибо, Рон, я подам заявку сегодня вечером, проголосовал и принял ответ, если он будет работать для меня

2. Я принял ответ, но есть еще один вопрос, там каждый заголовок, я должен сохранить данные в соответствующем контроллере, так как я могу сохранить данные 4 moth в четырех разных объектах

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

Ответ №3:

  1. возьмите словарь в initWithData: methode
  2. Принимать значения в качестве ключа, например, заголовок, описание
  3. в методе didStartElement в теге images выделите image_array
  4. в методе didEndElement в теге image добавьте свои данные (здесь ваша ссылка на изображение) в image_array
  5. теперь в методе didEndElement в теге images добавьте этот массив в свой основной словарь в качестве ключевых изображений

вот и все…..