Как я могу проанализировать наличие в XML нескольких узлов с одинаковыми именами и показывать их на разных контроллерах? - PullRequest
0 голосов
/ 03 октября 2011

См. XML ниже

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

Этот XML, имеющий несколько имен изображений, должен показать другой заголовок (Есть четыре заголовка) в соответствующем контроллере.У меня есть 4 контроллера, и я должен показывать каждое значение мотылька в разных контроллерах вместе со значениями их нескольких изображений, как я могу это сделать?

Я могу сделать один объект из четырех объектов?

Я немного запутался, пожалуйста, помогите мне.

Ответы [ 3 ]

1 голос
/ 03 октября 2011

Этот XML, имеющий несколько имен изображений, я должен показать другой заголовок (Есть четыре заголовка) в их соответствующем контроллере.У меня есть 4 контроллера, и я должен показать каждое значение моли в разных контроллерах вместе со значениями их нескольких изображений, как я могу это сделать?

Это звучит не так, как проблема с XML и больше какпроблема архитектуры приложения.

Этот XML в основном описывает некоторые данные, и эти данные обычно представляются объектами в вашем приложении.Вы можете использовать решение на основе CoreData, в котором вы анализируете XML в локальном хранилище CoreData (в памяти или на диске, не имеет значения), а затем отображаете управляемые объекты, как обычно.

Или, предполагая, что он представляет типичный набор данных, вы можете разобрать его в свои собственные объекты (или даже словари и массивы), а затем отобразить оттуда.

Есть десятки вопросов о разборе XML в SO (и через Google).

Вторая часть вашего вопроса не была рассмотрена.По сути, вам нужно правильно наложить ваше приложение на шаблон model-view-controller.Слой вашей модели будет анализировать XML и создавать граф объектов, который представляет данные.Каждый контроллер будет иметь ссылку на эту модель.

Это будет хорошо работать, пока ваше приложение доступно только для чтения.Если ожидается, что различные контроллеры также будут редактировать граф объекта, то это должно быть немного сложнее, так как вам придется иметь дело с распространением изменений (это то, где сияет CoreData; это делает управление изменениями, распространение, валидациюи отменить относительно просто).

0 голосов
/ 03 октября 2011
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]];
    }
0 голосов
/ 03 октября 2011

С помощью TBXML вы можете легко проанализировать xml, и он преобразует его в используемые объекты:

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

и libxml2 также можно легко использовать для анализа.

...