问题描述
|
我有一个重复的元素,我需要读取它的属性并将其发送给委托
xml是:
<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>
我只过去了代表的日期和名称的最后一个属性,我知道为什么会这样,但是我不知道如何解决。有人能帮我吗
这是我的目标C代码
- (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 \”来写入他们获得的每个值openHouRSSpecialDelegate而不是像现在这样覆盖它们
解决方法
我找不到任何错误的代码。我已经将上面的代码放入一个小的测试项目中(进行了微小的更改,使其可以独立运行),并且对我来说运行良好。
数组(
\“复活节,2011年4月22日\”,
\“ 2011年4月23日复活节星期六\”,
\“复活节,2011年4月24日\”,
\“ Anzac Day,25/04/2011 \”,
\“复活节,2011年4月26日,\”)
示例项目
您需要更改我在test2AppDelegate类中硬编码的路径,以指向包含上面发布的XML的文件。
,我已经在我的项目中锻炼了这个问题。但是我正在使用libxml2。
问题是(天节点)您必须将5个不同的值设置为相同的键(天),这就是为什么要获取last属性的原因。