我是新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只是实际值替换占位符。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top