Проблема: синтаксический анализ XML-файла в Objective-C / Cocoa Project для iOS - PullRequest
0 голосов
/ 11 ноября 2010

после поиска дней для решения моих ошибок, Я хочу поделиться всей проблемой с вами. Может быть, у кого-то есть лучшая идея, чтобы решить эту проблему.

Мой проект использует TabViewController для переключения между представлениями. Для каждого Tabview я загружаю отдельный класс File, чтобы сделать его более понятным.

Весь контент, который мне нужен для представлений, взят из XML-файлов. Я получаю их через URL. Структура выглядит так:

<?xml version="1.0"?>
<rss version="2.0">
    <channel>
        <Slice id=1>
            <image>www.testurl.com/test.jpg</img>
            <title>Sample Title #1</title>
            <text>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy</text>
        </Slice>

        <Slice id=2>
            <image>www.testurl.com/test2.jpg</img>
            <title>Sample Title #2</title>
            <text>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy</text>
        </Slice>
    </channel>
</rss>

Я получаю такой файл для каждого просмотра отдельно, содержащий контент сайтов, который я хочу показать в представлении.

Я попробовал несколько уроков для разбора xml и нашел способ разбора моих файлов и отображения его в TableView. Он работает нормально, но когда я пытаюсь реализовать файлы в моем проекте, возникает несколько проблем с использованием делегата.

У меня уже есть делегат в моем проекте, управляющий навигацией. Теперь у меня есть второй Делегат, управляющий парсером XML, но я все еще не знаю, как заставить второго делегата работать в моем представлении.

В каждом учебном пособии, которое я нашел, используется делегат проектов, но что, если у меня уже есть делегат, и я просто хочу добавить XML-парсер в свой проект.

Я схожу с ума от взлома ключевых слов в Google, не находя ничего связанного с моей проблемой. Это мой призыв о помощи. = D

Мой вопрос: Есть ли какой-нибудь простой способ добавить динамический xml-анализатор в мой проект, который возвращает мне массив с моим содержимым, когда я отправляю URL-адрес в Parser? Я просто хочу определить URL в моем ViewController и получить содержимое из XML.

Надеюсь, ты понимаешь мою проблему. Буду признателен за каждый ответ, который поможет мне в этом.

1 Ответ

1 голос
/ 11 ноября 2010

ммм .... может быть, ваша путаница связана с шаблоном делегата.

Делегат - это просто объект, который получает сообщения вместо другого объекта.Думайте об этом как о механизме обратного вызова.

Я предлагаю создать отдельный класс для синтаксического анализа файлов XML, например:

@interface  MyXMLParser : NSObject<NSXMLParserDelegate>

Этот класс имеет NSMutableArray результатов и анализmethod.

Метод parse будет выглядеть следующим образом:

-(void) parse:(NSString *)xmlFilePath
{
  self.results  = [[NSMutableArray alloc] init];  

  NSURL* xmlURL = [NSURL fileURLWithPath:xmlFilePath];
  NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
  parser.delegate = self;  
  [parser parse];
  [parser release];
}

В этом классе также необходимо реализовать методы делегата.Эти методы будут вызываться внутри вызова [parser parse], один раз для каждого элемента, найденного в XML-файле:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *) qualifiedName attributes:(NSDictionary *)attributeDict
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError 

Внутри этих методов вам необходимо «понять» полученные элементы и сохранить их.в массиве результатов.

Вы используете этот синтаксический анализатор следующим образом

MyXMLParser* parser = [[MyXmlParser alloc] init];
[parser parse:@"myfile.xml"]
NSLog(@"%@", parser.results);
[parser release];

Надеюсь, это поможет.

...