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

标签 iphone objective-c nsxmlparser xml-parsing

我是 iphone 开发的新手。我正在解析一个 XML 页面并在 tableview 中显示内容。在 XML 页面的某个 block 中,缺少子元素,我想在我的数组中添加一个值 o,当子元素不喜欢特定的 block 。我的 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:ratings 标签并在 TableView 中显示其属性 numRates 值。我有一个可变数组,它存储 numRates 的值。当第二个 block 被解析时,我必须在数组中添加对象“O”,因为它不包含 gd:ratings 标签。因为该值存在于属性标签中,对于检索内容并将其添加到可变数组是在 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 个入口标签 block ,其中 10 个 block 没有 gd 评级元素。所以数组 stories2 数组只有 15 个值。所以我无法按顺序在 TableView 中显示它。有没有办法检索“找到字符”方法中的属性标记。请帮帮我。谢谢。

最佳答案

可以使用didEndElement方法:当外层元素结束时,检查子元素是否被添加到数组中。

您可以使用 iVar 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; 
   }
   ...
}

关于iphone - 在xml解析中找不到子元素时如何向数组添加默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2229189/

相关文章:

iphone - startMonitoringSignificantLocationChanges 但一段时间后 didUpdateLocations 不再被调用

iphone - iOS RestKit Framework - 发送请求后崩溃

iphone - 尝试重写 Objective-C 中的方法时出现问题 (iPhone)

iphone - 如何使用 Xcode 4.2 和 Storyboard使用 "Page Control"?

objective-c - NSXML解析器: where store values?

iphone - 获取实体名称 : not recognised as valid method

ios - 使用导航 Controller 在不同 View 之间切换

iphone - 如何将数组数据传递给另一个方法

objective-c - Cocoa 对象空闲计时器

ios - 如何在 Xcode 中解析 XML 页面中的图像?