首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSXML解析器读取属性

NSXML解析器读取属性
EN

Stack Overflow用户
提问于 2011-05-23 20:43:38
回答 2查看 411关注 0票数 0

我有一个重复的元素,我需要读取它的属性并将它们发送给委托

xml是:

代码语言:javascript
复制
<special>
   <day date="22/04/2011" name="Easter Friday">Closed</day>
   <day date="23/04/2011" name="Easter Saturday">10:00-16:00</day>
   <day date="24/04/2011" name="Easter Sunday">Closed</day>
   <day date="25/04/2011" name="Anzac Day">13:00-17:00</day>
   <day date="26/04/2011" name="Easter Tuesday">09:00-18:00</day>
</special>

我只能将日期和名称的最后一个属性传递给委托,我知道为什么会发生这种情况,但我不知道如何修复它。有人能帮帮我吗?

下面是我的objective C代码

代码语言:javascript
复制
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"special"]) {
        storeAppDelegate.openingHoursSpecialDelegate = [[NSMutableArray alloc] init];
    }else if ([elementName isEqualToString:@"day"]) {
        openingHoursView = [[OpeningHoursView alloc] init];
        openingHoursView.name = [attributeDict objectForKey:@"name"];
        openingHoursView.date = [attributeDict valueForKey:@"date"];
      }
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"special"])
        return;
    if ([elementName isEqualToString:@"day"]){
        [storeAppDelegate.openingHoursSpecialDelegate addObject:openingHoursView];
        [openingHoursView release];
        openingHoursView = nil;     

    }   
}

openingHoursSpecialDelegate是应用程序委托中的可变数组,OpeningHoursView是另一个类中的名称和日期作为字符串的NSObject。它们还获取应用程序委托的值,并且它也是XML文件中"date“和"name”属性的最后一个读取值。我正在使用NSXML解析器,所以我的问题再次是如何让"openingHoursView.name“和"openingHoursView.date”将它们获得的每个值写入openingHoursSpecialDelegate,而不是像现在这样覆盖它们

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-23 21:02:10

我找不到代码有任何错误。我已经把上面的代码放到了一个小的测试项目中(只做了很小的改动,使它可以独立运行),它对我来说运行得很好。

数组(“2011年复活节星期五22/04/2011",”复活节星期六23/04/2011",“复活节星期日24/04/2011",”ANZAC日,25/04/2011",“复活节星期二,26/04/2011”)

Example project

您需要更改我在类test2AppDelegate中硬编码的路径,使其指向包含上面发布的XML的文件。

票数 1
EN

Stack Overflow用户

发布于 2011-05-23 21:18:59

我已经在使用libxml2的project.But中解决了这个问题。

问题是(day节点)您必须将5个不同的值设置为相同的键(day),这就是您获得last属性的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6097358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档