请参阅下面的 XML
http://sosmoths.com/.xml/moths.xml
这个 XML 有多个图像名称,我必须在它们各自的控制器中显示不同的标题(有四个标题)。我有 4 个控制器,并且必须在不同的控制器中显示每个飞蛾值,以及它们的多个图像值,我该怎么做?
我可以制作单个物体,我应该制作四个物体吗?
我对此有点困惑,请帮助我。
请参阅下面的 XML
http://sosmoths.com/.xml/moths.xml
这个 XML 有多个图像名称,我必须在它们各自的控制器中显示不同的标题(有四个标题)。我有 4 个控制器,并且必须在不同的控制器中显示每个飞蛾值,以及它们的多个图像值,我该怎么做?
我可以制作单个物体,我应该制作四个物体吗?
我对此有点困惑,请帮助我。
这个 XML 有多个图像名称,我必须在它们各自的控制器中显示不同的标题(有四个标题)。我有 4 个控制器,并且必须在不同的控制器中显示每个飞蛾值,以及它们的多个图像值,我该怎么做?
这听起来不像是 XML 解析问题,而更像是应用程序架构问题。
该 XML 基本上描述了一些数据,并且所述数据通常由应用程序中的对象表示。您可以使用基于 CoreData 的解决方案,将 XML 解析到本地 CoreData 存储(在内存或磁盘上,无关紧要),然后照常显示托管对象。
或者,假设它代表一组典型的数据,您可以将其解析为您自己的手卷对象(或者,甚至是字典和数组),然后从那里显示。
关于在 SO(和通过 Google)上解析 XML 有很多问题。
您问题的第二部分尚未解决。基本上,您需要将您的应用程序正确地分层到模型-视图-控制器模式中。您的模型层将解析 XML 并创建一个表示数据的对象图。每个控制器都会引用该单个模型。
只要您的应用程序是只读的,这将正常工作。如果期望各种控制器也编辑对象图,那么它需要更复杂一些,因为您必须处理更改传播(这是 CoreData 的亮点;它进行更改管理、传播、验证,并且撤消相对简单)。
使用 TBXML,您可以轻松解析 xml,并将其转换为对象以供使用:
http://www.tbxml.co.uk/TBXML/TBXML_Free.html
并且 libxml2 也是您可以轻松使用的解析。
try this it worked properly
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
NSLog(@"%@",elementName);
if([elementName isEqualToString:@"moths"]){
mytblarray=[[NSMutableArray alloc] init];
} else if([elementName isEqualToString:@"moth"]){
tmpdic=[[NSMutableDictionary alloc] init];
}
else if([elementName isEqualToString:@"images"]){
imgArray=[[NSMutableArray alloc] init];
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if(tmpstr!=nil && [tmpstr retainCount]>0){ [tmpstr release]; tmpstr=nil; }
tmpstr=[[NSString alloc] initWithString:string];
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if([elementName isEqualToString:@"moth"]){
[mytblarray addObject:tmpdic];
[tmpdic release];
}if([elementName isEqualToString:@"images"]){
[tmpdic setValue:imgArray forKey:elementName];
}
else if([elementName isEqualToString:@"image"]){
[imgArray addObject:tmpstr];
}
else if([elementName isEqualToString:@"id"] || [elementName isEqualToString:@"title"]||[elementName isEqualToString:@"description"]){
[tmpdic setValue:tmpstr forKey:elementName];
}
}
-(void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"%@",[imgArray description]);
NSLog(@"%@",[mytblarray description]);
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//get value like it
NSString *cellValue = [[mytblarray objectAtIndex:indexPath.row] valueForKey:@"id"];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//get value like it
NSMutableDictionary *dict=[[NSMutableDictionary alloc]initWithDictionary:
[mytblarray objectAtIndex:indexPath.row]];
}