Разбор XML: определить / получить данные для конкретного элемента? - PullRequest
0 голосов
/ 19 марта 2010

У меня есть следующие методы в моем простом пользовательском классе анализатора, когда я выполняю CALLED: на моих данных я получаю ...

Found: OK
Found: 046 3433 5674 3422 4456 8990 1200 5284

Мой вопрос: как мне добавить это, чтобы я мог специально выбрать информацию для элемента данных (см. Ниже), есть ли что-нибудь, что я могу добавить к - (void) парсеру: метод Я так делаю?

<data version="1.0">2046 3433 5674 3422 4456 8990 1200 5284</data>

Вот разделы моего кода:

// CLASS:

@interface CustomParser : NSObject <NSXMLParserDelegate> {
}
-(void)parseFile:(NSString *)pathToFile;
@end

@implementation CustomParser

-(void)parseFile:(NSString *)pathToFile {
    NSLog(@"parseXMLFile ... \"%@\"", pathToFile);
    NSURL *url = [NSURL fileURLWithPath:pathToFile];
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    [parser setDelegate:self];
    [parser parse];
    [parser release];
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
    NSLog(@"Found: %@", string);
}
@end

.

//CALLED:
CustomParser *newParser = [[CustomParser alloc] init];
[newParser parseFile:fileOnDisk];

... more

[newParser release];

.

//DATA:
<!DOCTYPE tubinerotationdata>
<turbine version="1.0">
<status version="1.0" result="200">OK</status>
<data version="1.0">
    2046 3433 5674 3422 4456 8990 1200 5284
</data>
</turbine>

* 1016 Гэри *

1 Ответ

1 голос
/ 19 марта 2010

Вам необходимо реализовать методы didStartElement и didEndElement и использовать ivars для отслеживания текущего имени и значения элемента.

Пример одного способа сделать это:

//Instance variables:  
NSString *currentElementValue;
NSString *statusValue;
NSString *dataValue;

В didStartElement:

currentElementValue = @"";

В найденных символах:

currentElementValue = [currentElementValue stringByAppendingString:string];

в didEndElement:

if ([elementName isEqualToString:@"status"])
{
    statusValue = currentElementValue;
}
else
if ([elementName isEqualToString:@"data"])
{
    dataValue = currentElementValue;
}

В качестве альтернативы, у вас может быть ивар, который отслеживает текущее имя элемента, и в foundCharacters установите на его основе statusValue и dataValue.

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