如何在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;
}
...
}
答
如果你知道所有你期望的数据字段,在解析XML之前,您可以使用占位符为您的所有期望值创建一本字典;当您解析XML时,只需用实际值替换占位符即可。
请详细说明一下。如何将值0添加到我的storeis2数组中 – Warrior 2010-02-09 13:48:29
我添加了更多的代码。希望有所帮助。 – FelixLam 2010-02-09 14:01:18
数以千计的Thanks.It正常工作... – Warrior 2010-02-09 14:11:49