Iphone 如何解析具有相同名称的多个节点并在不同控制器中显示的XML?
请参见下面的XML 这个XML有多个图像名称,我必须在它们各自的控制器中显示不同的标题(有四个标题)。 我有4个控制器,并且必须在不同的控制器中显示每个蛾的值,以及它们的多个图像值,我如何才能做到这一点 我可以做一个物体,我应该做四个物体吗Iphone 如何解析具有相同名称的多个节点并在不同控制器中显示的XML?,iphone,nsxmlparser,xmlnode,Iphone,Nsxmlparser,Xmlnode,请参见下面的XML 这个XML有多个图像名称,我必须在它们各自的控制器中显示不同的标题(有四个标题)。 我有4个控制器,并且必须在不同的控制器中显示每个蛾的值,以及它们的多个图像值,我如何才能做到这一点 我可以做一个物体,我应该做四个物体吗 我对此有点困惑,请帮帮我。使用TBXML,您可以轻松解析xml,并将其转换为要使用的对象: libxml2也是一种可以轻松解析的语言 try this it worked properly -(void)parser:(NSXMLPar
我对此有点困惑,请帮帮我。使用TBXML,您可以轻松解析xml,并将其转换为要使用的对象: 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]];
}
这个XML有多个图像名称,我必须显示不同的
标题(有四个标题)在各自的控制器中。我有四个
控制器,并且必须在不同的控制器中显示每个蛾值,
除了它们的多个图像值外,我如何才能做到这一点
这听起来不像是XML解析问题,更像是应用程序架构问题
XML基本上描述了一些数据,并且表示数据通常由应用程序中的对象表示。您可以使用基于CoreData的解决方案,将XML解析到本地CoreData存储中(内存或磁盘中,无关紧要),然后按照常规显示托管对象
或者,假设它代表一组典型的数据,您可以将其解析为自己的手动滚动对象(甚至是字典和数组),然后从那里显示
在SO上(以及通过Google)解析XML有很多问题
你问题的第二部分还没有提到。基本上,您需要将应用程序正确地分层到模型-视图-控制器模式中。模型层将解析XML并创建表示数据的对象图。每个控制器都有一个对该单一模型的引用
只要你的应用程序是只读的,这就可以正常工作。如果期望各种控制器也编辑对象图,那么它需要稍微复杂一点,因为您必须处理更改传播(这是CoreData的亮点;它使更改管理、传播、验证和撤消相对简单)。是的,您可以这样做。在派生特定数据时,可以触发特定viewController的协议调用,在派生其他三个viewController的数据时,也可以采用相同的方式触发它们的协议调用。所以协议的使用可以解决你的问题。我试过Bhatt,但有点困惑,你能给我一点想法吗?通过给出代码,它是tableview,有四行,每行将显示各自的方法,我在解析你的url后添加了所有代码将此代码添加到你的项目中:检查输出,说明数据不完整,由于foundCharacter方法在一个描述节点内执行的次数太多,根据其行为,Ron AnswerOk也存在同样的问题现在尝试一下它给出大约90%的最接近输出,只需稍作更改即可使其达到100%:)我以前从未使用过它,您能告诉我使用TBXML使用这种xml的想法吗,问题是有一个名称的multipletag,所以同样的事情,我甚至无法通过TBXMLGo找到我的答案,继续使用libxml2,一旦您遵循它并正确地使用它…它将生成具有相同名称的节点数组。唯一的办法就是尝试一下,您将只从libxml2获得解决方案。即使我也有相同的并行节点,比如,但一旦你在libxml2的帮助下解析,它将生成employee数组。在代码中使用retainCount是毫无意义的,并且引起了人们的怀疑,它的其余部分可能也会被破坏。如果你知道@bbumn在我看到这一点时没有时间的话,更好的方法是给出问题的答案。希望确保此代码没有被盲目复制/粘贴,因为它有一些严重的问题。@bbum如果您知道更好的方法,请帮助我。因为我使用相同的方法