NSXMLParser на iOS, как мне использовать его с помощью файла XML - PullRequest
3 голосов
/ 03 июня 2010

Мне было интересно, как мне использовать синтаксический анализатор NSXML. так скажем, учитывая, что у меня есть простой XML-файл с такими элементами, как:

<Today>
<Date>1/1/1000</Date>
<Time>14:15:16</Time>
</Today>

Как я могу использовать NSXMLParser для анализа XML-файла (он находится локально на рабочем столе), проверки каждого элемента и сохранения каждого из них в массиве, который будет отображаться / использоваться позже?

Я просматривал некоторую документацию об этом, и я понятия не имею, как использовать парсер Я знаю, что есть 3 метода (или больше, пожалуйста, исправьте меня, если я ошибаюсь), которые могут быть отменены - и т. д. didStartElement - .. и т. д. didEndElement - .. и т. д. Найдено персонажей

1 Ответ

4 голосов
/ 24 июня 2010

Самое простое - сделать что-то вроде этого:

NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:<yourNSData>];
[xmlParser setDelegate:self];
[xmlParser parse];

Обратите внимание, что setDelegate: устанавливает для делегата значение «self», то есть текущий объект. Итак, в этом объекте вам нужно реализовать методы делегата, которые вы упомянули в вопросе.

так что дальше в коде вставьте:

    - (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
        namespaceURI:(NSString *)namespaceURI
       qualifiedName:(NSString *)qualifiedName 
         attributes:(NSDictionary *)attributeDict{

       NSLog(@"I just found a start tag for %@",elementName);
       if ([elementName isEqualToString:@"employee"]){
       // then the parser has just seen an <employee> opening tag
       }         
     }

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"the parser just found this text in a tag:%@",string);
}

и т.д.. и т.д.

Это немного сложнее, когда вы хотите сделать что-то вроде установки переменной на значение какого-либо тега, но обычно это делается с помощью переменной класса caleld, например "BOOL inEmployeeTag", которую вы устанавливаете в true (YES) didStartElement: метод и false в didEndElement: метод - и затем проверьте его значение в методе foundCharacters. Если да, тогда вы присваиваете var значение строки, а если нет, то не делаете.

ричард

...