Атрибуты чтения синтаксического анализатора NSXML - PullRequest
0 голосов
/ 23 мая 2011

У меня есть элемент, который повторяется, и мне нужно прочитать его атрибуты и отправить их делегату

xml:

<special>
   <day date="22/04/2011" name="Easter Friday">Closed</day>
   <day date="23/04/2011" name="Easter Saturday">10:00-16:00</day>
   <day date="24/04/2011" name="Easter Sunday">Closed</day>
   <day date="25/04/2011" name="Anzac Day">13:00-17:00</day>
   <day date="26/04/2011" name="Easter Tuesday">09:00-18:00</day>
</special>

Я прошёл только последние атрибуты даты и имени делегата, и я знаю, почему это происходит, но я не знаю, как это исправить. кто-нибудь может мне помочь

вот мой объективный код C

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"special"]) {
        storeAppDelegate.openingHoursSpecialDelegate = [[NSMutableArray alloc] init];
    }else if ([elementName isEqualToString:@"day"]) {
        openingHoursView = [[OpeningHoursView alloc] init];
        openingHoursView.name = [attributeDict objectForKey:@"name"];
        openingHoursView.date = [attributeDict valueForKey:@"date"];
      }
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"special"])
        return;
    if ([elementName isEqualToString:@"day"]){
        [storeAppDelegate.openingHoursSpecialDelegate addObject:openingHoursView];
        [openingHoursView release];
        openingHoursView = nil;     

    }   
}

opensHoursSpecialDelegate - это изменяемый массив в делегате приложения, а OpeningHoursView - это объект NSO, в котором имя и дата представлены в виде строк в другом классе. Они также получают значение делегата приложения, и оно также является последним значением чтения атрибутов «date» и «name» из файла XML. Я работаю с парсером NSXML Итак, еще раз, мой вопрос заключается в том, как получить «opensHoursView.name» и «creationHoursView.date», чтобы записать каждое значение, которое они получают, в creationHoursSpecialDelegate, а не перезаписать их, как это происходит сейчас

Ответы [ 2 ]

1 голос
/ 23 мая 2011

Я уже решил эту проблему в своем проекте. Но я использую libxml2.
Проблема в том, что (узел дня) вы должны установить 5 разных значений для одного и того же ключа (дня), поэтому вы получаете последний атрибут.

1 голос
/ 23 мая 2011

Я не могу найти что-то не так с кодом. Я поместил приведенный выше код в небольшой тестовый проект (с небольшими изменениями, чтобы он работал автономно), и он работает нормально для меня.

Массив ( «Пасхальная пятница, 22/04/2011», «Пасхальная суббота, 23/04/2011», «Пасхальное воскресенье, 24/04/2011», «День Анзака, 25/04/2011», «Пасхальный вторник, 26.04.2011»)

Пример проекта

Вам нужно изменить путь, который я жестко закодировал в классе test2AppDelegate, чтобы указать на файл, содержащий XML, который вы опубликовали выше.

...