如何在xml解析中找不到子元素时向数组添加默认值?

问题描述:

我是iphone开发新手。我解析XML页面并在tableview中显示内容。在XML页面的某些块中,子元素缺失,我想在数组中添加一个值o子元素并不是特别block.My XML文件中的爱就像是如何在xml解析中找不到子元素时向数组添加默认值?

<entry> 
<id>xxx </id> 
<title>xxxxx</title> 
<gd:ratings numRaters="2"/> 
</entry> ..................................>first block 
<entry> 
<id>xxx </id> 
<title>xxxxx</title> 
</entry> ....................................>Second block 
<entry> 
<id>xxx </id> 
<title>xxxxx</title> 
<gd:ratings numRaters="2"/> 
</entry> .....................................>Third block 

我解析了GD:评级标签,并在tableview中显示其属性numRates值。我有一个可变数组,用于存储numRates的值。当第二个块因为不包含gd:ratings标记而被解析时,必须在数组中添加对象“O”。由于该值存在于属性标记中,因此检索内容并将其添加到可变数组是在NSXML分析器DidStartElement方法中完成的。

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

currentElement = [elementName copy]; 
if ([elementName isEqualToString:@"entry"]) { 

    entry = [[NSMutableDictionary alloc] init]; 
    currentTitle = [[NSMutableString alloc] init]; 
    currentDate = [[NSMutableString alloc] init]; 
    NSLog(@"inside image1 "); 
}else if([elementName isEqualToString:@"media:thumbnail"]) 
    { currentImage = [[NSMutableString alloc] init]; 
     if(myUrl == nil){ 
     myUrl = [NSString stringWithString:[attributeDict objectForKey:@"url"]]; 
     } 
     [currentImage appendString:myUrl]; 
     [stories1 addObject:currentImage]; 
     myUrl=nil; 
     } else if([elementName isEqualToString:@"gd:rating"]) 
{ 
    currentRating=[[NSMutableString alloc]init]; 

     myRatings=[NSString stringWithString:[attributeDict objectForKey:@"numRaters"]]; 

    [currentRating appendString:myRatings]; 
    [stories2 addObject:currentRating]; 
} 
} 

由于存在条目标签的25个块并且在10块不列入有无GD评级元件。所以阵列stories2阵列仅具有15 values.So我不能在order.Is所述的tableview有任何显示它在“找到的字符”方法中检索属性标签。请帮助我。谢谢。

您可以使用didEndElement方法:当外部元素结束时,检查是否将子元素添加到数组中。然后,当一个元素结束

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

    currentElement = [elementName copy]; 
    if ([elementName isEqualToString:@"entry"]) { 
    entryHasRating = NO; 
    ... 
    } else if ([elementName isEqualToString:@"gd:rating"]){ 
    entryHasRating = YES; 
    ... 
    } 
} 

你可以使用伊娃BOOL entryHasRating并执行以下操作

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if ([elementName isEqualToString:@"entry"]&& !entryHasRating) { 
     [stories2 addObject:@"No Rating"]; 
     entryHasRating = YES; 
    } 
    ... 
} 
+0

请详细说明一下。如何将值0添加到我的storeis2数组中 – Warrior 2010-02-09 13:48:29

+0

我添加了更多的代码。希望有所帮助。 – FelixLam 2010-02-09 14:01:18

+0

数以千计的Thanks.It正常工作... – Warrior 2010-02-09 14:11:49

如果你知道所有你期望的数据字段,在解析XML之前,您可以使用占位符为您的所有期望值创建一本字典;当您解析XML时,只需用实际值替换占位符即可。