0

请参阅下面的 XML

http://sosmoths.com/.xml/moths.xml

这个 XML 有多个图像名称,我必须在它们各自的控制器中显示不同的标题(有四个标题)。我有 4 个控制器,并且必须在不同的控制器中显示每个飞蛾值,以及它们的多个图像值,我该怎么做?

我可以制作单个物体,我应该制作四个物体吗?

我对此有点困惑,请帮助我。

4

3 回答 3

1

这个 XML 有多个图像名称,我必须在它们各自的控制器中显示不同的标题(有四个标题)。我有 4 个控制器,并且必须在不同的控制器中显示每个飞蛾值,以及它们的多个图像值,我该怎么做?

这听起来不像是 XML 解析问题,而更像是应用程序架构问题。

该 XML 基本上描述了一些数据,并且所述数据通常由应用程序中的对象表示。您可以使用基于 CoreData 的解决方案,将 XML 解析到本地 CoreData 存储(在内存或磁盘上,无关紧要),然后照常显示托管对象。

或者,假设它代表一组典型的数据,您可以将其解析为您自己的手卷对象(或者,甚至是字典和数组),然后从那里显示。

关于在 SO(和通过 Google)上解析 XML 有很多问题。

您问题的第二部分尚未解决。基本上,您需要将您的应用程序正确地分层到模型-视图-控制器模式中。您的模型层将解析 XML 并创建一个表示数据的对象图。每个控制器都会引用该单个模型。

只要您的应用程序是只读的,这将正常工作。如果期望各种控制器也编辑对象图,那么它需要更复杂一些,因为您必须处理更改传播(这是 CoreData 的亮点;它进行更改管理、传播、验证,并且撤消相对简单)。

于 2011-10-03T16:14:02.930 回答
0

使用 TBXML,您可以轻松解析 xml,并将其转换为对象以供使用:

http://www.tbxml.co.uk/TBXML/TBXML_Free.html

并且 libxml2 也是您可以轻松使用的解析。

于 2011-10-03T05:12:16.210 回答
0
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]];
    }
于 2011-10-03T10:17:52.287 回答