Проблема с парсером XML - PullRequest
3 голосов
/ 13 июля 2011

Я использую парсер XML, доступный здесь: http://www.saygoodnight.com/2009/08/a-simple-quick-reusable-xml-parser-for-the-iphone/

Я выбрал его, потому что просто не мог заставить обычный работать с моей веб-страницей. Однако этот работает, так как в консоли я получаю результат, подобный:

Элемент: x-position Данные: 136 Родитель: somepoint

Это происходит из кода, подобного этому, в моем основном файле реализации:

[thisParser dumpRoot];

У меня вопрос, как я могу на самом деле получить доступ к значению 136 как-нибудь? Было бы замечательно, если бы я мог просто сделать object.x-position или что-то еще, но я не уверен, как это будет работать с этим классом. Полный класс доступен для скачивания по вышеупомянутой ссылке, и, похоже, является хорошей альтернативой.

Я был бы очень признателен за любую помощь, спасибо.

1 Ответ

1 голос
/ 13 июля 2011

Предпосылка синтаксического анализатора кажется очень простой. Когда это будет сделано, он предоставит вам NSArray NSDictionaries.

Вам просто нужно написать другой метод, который использует его ..

Что-то вроде -

-(NSString*) getElement:(NSString*)element fromArray:(NSArray *)array
{
   for ( int i = 0 ; i < [array count] ; i++ ) 
   {
       NSDictionary* thisDict = [array objectAtIndex:i];
       if ( [element isEqualToString:[thisDict objectForKey:@"element"]] )
               return [thisDict objectForKey:@"data"];
       else
       {
            NSString *ret =  [self getElement:element fromArray:[thisDict objectForKey:@"children"]];
            if ( ret == nil )
                continue;
            else 
                return ret;
   }
}
return nil;
}

Поместите метод-обертку в ваш SimpleParser.h

-(NSString*)getParsedElement:(NSString *)elementName;

Реализуйте в вашем .m так -

-(NSString *)getParsedElement:(NSString *)elementName 
{
    return [self getElement:elementName fromArray:theMainStack];
}

Тогда вы можете назвать это так -

[thisParser getParsedElement:@"x-position";
...