我想改变这个XML:
<tennis>
<date>01-01-2013
<tournament>
<location>
<city>London</city>
<venue>Wimbledon</venue>
</location>
<match>
<player>Andy Murray</player>
<player>Roger Federer</player>
</match>
<match>
<player>Rafa Nadal</player>
<player>Andy Roddick</player>
</match>
</tournament>
<date>02-01-2013
<tournament>
<location>...
进入显示日期的tableview,选中后将导航到分组的tableview,Venue为section header,以及表行中的匹配列表。
我的问题是什么是最好的方法。目前我正在使用NSXMLParser ..
然后我的第一个tableview只显示Date字典中的键,当选择一行时,它会将相关的Venues数组'传递给下一个tableview类。
然后从第二个字典中选择匹配对象,使用传入的Venues数组作为查找的关键字。
如果这令人困惑,请向我道歉。当我把它写出来时,这对我来说。
这是构建数组和字典的NSXMLParser方法,设置标志以保持状态等,这是像我这样的XML的推荐方法吗?
我应该使用DOM解析器吗?
提前感谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
我使用XSXMLparser
从网站解析一些XML,然后通过以下方式在表格中显示密钥:
[myDictionary allKeys]objectAtIndex:indexPath.row;
然后在选择时,我创建一个新的表实例并通过属性设置重要变量:
tableScreen *tableScreenNew = [[tableScreen alloc]init];
tableScreenNew.currentLevel = 1;
tableScreenNew.numberOfRows = counter;
tableScreenNew.parsedData = parsedData;
[self.navigationController pushViewController:tableScreenNew animated:YES];
这将使用我需要的数据推送新表,并在cellForRow:
我只有一个if:
if(currentLevel == 0)
{
}
else if(currentLevel == 1)
{
}
else
{
NSLog(@"I Messed up");
}
在cellForRow中为你需要的内容分配一个临时字典:
NSDictionary *tempDictionary = [NSDictionary dictionaryWithDictionary:[originalParsedData valueForKey:dateKeyNameFromLastTable]];
编辑:解析代码
NSData *myData = [xmlToParse dataUsingEncoding:NSUTF16StringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:myData];
[parser setDelegate:self];
if([parser parse])
{
NSLog(@"Success");
NSLog(@"****************************** Finished Dictionary ******************************");
for(int i = 0;i < [parsedData count];i++)
{
NSLog(@"%d:%@",i,[parsedData objectAtIndex:i]);
}
NSLog(@"*********************************************************************************");
}
else
{
NSLog(@"Epic Fail");
NSLog(@"%@",[parser parserError]);
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
{
NSLog(@"Processing Element: %@", elementName);
NSLog(@"Processing Attributes: %@", attributeDict);
//Here you would start adding the key/Dicts to a NSMutableDictionary which you would use to populate tables
[myNSMutableDictionary addObject:attributeDict forKey:elementName];
}