如何默认值添加到一个数组时,XML解析没有找到子元素?
-
19-09-2019 - |
题
我是新iphone development.I正在解析XML页面,并在tableview.In显示内容的XML页面的一些块,子元素丢失了,我想在我的阵列中添加值O时,子元素不是特定block.My 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.I的值具有与阵列中添加对象“O”时,第二块被解析,因为它不列入包含GD的可变数组:评分tag.Since的值是存在于一个属性标记,用于检索内容和将其添加到可变阵列在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有显示它的任何出路来检索在“找到的字符”方法的属性标记。请帮我out.Thanks。
解决方案
可以使用didEndElement
方法:当外元件结束,检查子元素被添加到阵列
您可以使用伊娃BOOL entryHasRating
并执行以下操作:
- (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;
...
}
}
然后,当一个元素结束:
- (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只是实际值替换占位符。
不隶属于 StackOverflow