Анализ XML в Cocoa

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

Спасибо за любую помощь!

EDIT Причина, по которой я хочу создать синтаксический анализатор XML, - это получить информацию из базы данных MYSQL на сервере в клиентское приложение. Если есть лучший способ сделать это, помимо анализатора XML, пожалуйста, дайте мне знать!

Ответ 1

Вот как это работает:

Есть класс под названием NSXMLParser. Он используется для анализа XML файлов. Однако NSXMLParser глуп. Все, что он знает, как это сделать, - это проанализировать XML, но он не знает, что он должен делать с информацией, которую он находит.

Введите делегат. Делегат - как няня. Поскольку XMLParser не имеет понятия, что делать с информацией, которую он находит, он идет и просит своего делегата обо всех: "Эй, я начал разбирать документ! Я должен что-нибудь сделать?" "Эй, я нашел какой-то CDATA! Что я должен делать с этим!" "Эй, я нашел еще один тег!" "Эй, я нашел закрывающий тег!" И так далее. Все эти "Эй!" операторы - это методы делегата, или, другими словами, они являются необязательными методами, которые объект-делегат может реализовать. Обычно (но не всегда) объект, создающий NSXMLParser, также является делегатом, но это не обязательно.

Итак, у вас может быть что-то вроде этого:

NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:someURLToAnXMLFile];
[parser setDelegate:self];
[parser parse];
[parser release];

Тогда в том же самом объекте (self) у вас могут быть некоторые из этих методов:

- (void)parserDidStartDocument:(NSXMLParser *)parser {
  //the parser started this document. what are you going to do?
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
  //the parser found an XML tag and is giving you some information about it
  //what are you going to do?
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
  //the parser found some characters inbetween an opening and closing tag
  //what are you going to do?
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {
  //the parser finished. what are you going to do?
}

В документации есть целая куча этих методов. Просто перейдите к ссылке на NSXMLParser, и все они перечислены в разделе "Методы делегатов". После того, как вы получите его, NSXMLParser довольно прост в использовании. Это SAX Parser, что означает его парсер, управляемый событиями. Он находит материал, и он рассказывает вам об этом.