#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:
- возьмите словарь в initWithData: methode
- Принимать значения в качестве ключа, например, заголовок, описание
- в методе didStartElement в теге images выделите image_array
- в методе didEndElement в теге image добавьте свои данные (здесь ваша ссылка на изображение) в image_array
- теперь в методе didEndElement в теге images добавьте этот массив в свой основной словарь в качестве ключевых изображений
вот и все…..