2010-09-15 47 views
0

我真的很努力。我有一个XML饲料:从xml的uitableview部分和行

<?xml version="1.0" encoding="ISO-8859-1"?> 
<data> 
    <date> 
     <name>27/9/10</name> 
     <event> 
      <title>Event 1</title> 
      <more>Copy in here</more> 
     </event> 
    </date> 
    <date> 
     <name>04/10/10</name> 
     <event> 
      <title>Event 1</title> 
      <more>Copy in here</more> 
     </event> 
     <event> 
      <title>Second Event</title> 
      <more>Copy in here</more> 
     </event> 
    </date> 
</data> 

我可以管理解析的XML:

- (void)parseXMLFileAtURL:(NSString *)URL { 
    sections = [[NSMutableArray alloc] init]; 
    items = [[NSMutableArray alloc] init]; 

    NSURL *xmlURL = [NSURL URLWithString:URL]; 
    rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
    [rssParser setDelegate:self]; 
    [rssParser parse]; 
} 

- (void)parserDidStartDocument:(NSXMLParser *)parser { 

} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 

    currentElement = [elementName copy]; 

    if ([elementName isEqualToString:@"event"]) { 
     currentTitle = [[NSMutableString alloc] init]; 
     currentSummary = [[NSMutableString alloc] init]; 
    } 

    if ([elementName isEqualToString:@"date"]) { 
     item = [[NSMutableDictionary alloc] init]; 
    currentSection = [[NSMutableString alloc] init]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 

    if ([elementName isEqualToString:@"date"]) { 
     [item setObject:[NSNumber numberWithInt:itemsCount] forKey:@"itemsCount"]; 
     [item setObject:currentSection forKey:@"name"]; 
     [items addObject:[item copy]]; 

     itemsCount = 0; 
    } 

    if ([elementName isEqualToString:@"event"]) { 
     [item setObject:currentTitle forKey:@"title"]; 
     [item setObject:currentSummary forKey:@"more"]; 
     [items addObject:[item copy]]; 

     itemsCount = itemsCount + 1; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    if ([currentElement isEqualToString:@"name"]) { 
     [currentSection appendString:string]; 
    } else if ([currentElement isEqualToString:@"title"]) { 
     [currentTitle appendString:string]; 
    } else if ([currentElement isEqualToString:@"more"]) { 
     [currentSummary appendString:string]; 
    } 
} 

- (void)parserDidEndDocument:(NSXMLParser *)parser { 

    [self.progressView.view removeFromSuperview]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
    [dataTable reloadData]; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    if ([sections count] == 0) { 
     NSString * path = @"http://www.campuscloud.co.uk/_dev/calendar.xml"; 
     [self parseXMLFileAtURL:path]; 
    } 

} 

但是,当我尝试在我的表显示这一点,一切都错了,当我显示两个以上的事件为一个日期。我希望日期显示为部分标题和要显示在下方的事件。

在此欢迎任何帮助......

回答

1

嘿,伙计。我不知道我的理解coorect,但让我们去..

您可以创建阵列的字典..

NSMutableDictionary *dates = [NSMutableDictionary alloc]; 
NSMutableArray *events = [NSMutableArray alloc]; 
要插入一个日期的所有事件的数组中

..

[events addObject:@"event 1"]; 
在字典哟

U将插入事件的阵列塔日期为重点

[dates setobject:events forKey:@"01/01/2010"]; 

当解析器找到一个新的日期,一个新的数组应创建(我的意思是,值新..数组不追加,清理它..但你不需要创建一个全新的阵列)

当然,你必须对解析器进行一些更改以确定日期等,但这不是什么大不了的事情。

在表格

每个部分是从字典一个键..所以部分的数量是在词典项的数量..和单元的内部的值是每个日期的阵列..

我希望它可以帮助..