Разбор дат в XML для iOS SDK с использованием TBXML - PullRequest
1 голос
/ 21 апреля 2011

Я использую парсер TBXML. Я не уверен, что это специфично для TBXML или нет. У меня есть XML-файл, в котором есть дата. Затем я анализирую это с помощью TBXML. Затем я хочу отформатировать эту дату с помощью NSDateFormatter, однако, когда я отлаживаю ее и выводю с помощью NSLog, она отображается как (ноль).

Вот мой XML:

<locations>
    <location>
        <place>null</place>
        <geo>null</geo>
        <location_date>2010-12-25 10:15:15 +0000</location_date>
    </location>
    <location>
        ...
    </location>
</locations>

Вот так я разбираюсь. Я загрузил XML-файл в порядке (я протестировал другие узлы, и я могу вывести значения в порядке, поэтому он отлично читает XML. Я определяю root и затем выполняю цикл while вокруг узла. Я создал класс Location, который имеет соответствующие свойства для хранения извлеченных значений узлов XML. Все это NSString, однако я попытался NSDate для locationDate.

Должен ли я хранить дату по-другому в узле? Рад предоставить больше кода, если это необходимо.

if (root) {
        // search for the first location element within the root element's children
        TBXMLElement * location = [TBXML childElementNamed:@"location" parentElement:root];
        NSDateFormatter *formatter=[[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyyMMdd"];

        // if an location element was found
        while (location != nil) {

            // instantiate an location object
            Location * aLocation = [[Location alloc] init];

            TBXMLElement * locationDate = [TBXML childElementNamed:@"location_date" parentElement:location];

            // if we found a locationDate
            if (locationDate != nil) {
                aLocation.locationDate = [TBXML textForElement:locationDate];
                NSDate *locDate=[formatter dateFromString:aLocation.locationDate];
                NSLog(@"the current location date is %@", locDate);
            }

            [locations addObject:aLocation];
        [aLocation release];

            // find the next sibling element named "location"
            location = [TBXML nextSiblingNamed:@"location" searchFromElement:location];

        }
    }

Вывод на консоль, который я получаю:

the current location date is (null)

Идея состояла бы в том, чтобы затем поместить это в формат, чтобы я мог сравнить даты с текущим, однако я даже не могу прочитать даты в xml и отформатировать их должным образом.

Любая помощь приветствуется.

Пол

1 Ответ

1 голос
/ 24 апреля 2011

Ваш DateFormat неверен.Если он настроен неправильно, полученная строка будет nil.Попробуйте это так:

[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss +ZZZ"];

Проверьте здесь хороший справочник по NSDateFormatter:

http://cocoawithlove.com/2009/05/simple-methods-for-date-formatting-and.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...