Как разобрать XML-файлы в Xcode

Одной простой задачей, которая является основой для многих приложений, является возможность анализа файлов XML. И, к счастью, Xcode позволяет относительно легко анализировать XML-файл в Objective-C.

XML-файл может содержать что угодно, от основных данных о вашем приложении до RSS-канала для веб-сайта. Они также могут быть отличным способом удаленного обновления информации в вашем приложении, что исключает необходимость отправки нового двоичного файла в Apple, просто чтобы добавить новый элемент в список.

Итак, как мы обрабатываем файлы XML в XCode? Процесс содержит шаги для инициализации переменных, которые будут использоваться, запуска процесса синтаксического анализатора XML, подачи этого процесса в файл, начала отдельного элемента, символов (значения) внутри элемента, конца отдельного элемента и конца процесса разбора.

В этом примере мы будем анализировать файл из Интернета, передав ему определенный веб-адрес (URL).

Мы начнем с создания файла заголовка. Это пример очень простого заголовочного файла для контроллера подробного представления с минимальными требованиями для анализа нашего файла:

 @interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
NSMutableArray * статьи;
NSMutableDictionary * элемент;
NSString * currentElement; < br /> NSMutableString * ElementValue;
BOOL errorParsing;
}
@property (nonatomic, retain) IBOutlet DetailViewController * detailViewController;
- (void) parseXMLFileAtURL: (NSString *) URL ;

Функция parseXMLFileAtURL запустит процесс для нас. Когда он закончится, NSMutableArray «article» будет содержать наши данные. Массив будет состоять из изменяемых словарей с ключами, связанными с именами полей в файле XML.

Теперь, когда мы настроили необходимые переменные, мы перейдем к встрече процесса в файле .m:

 - (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Файл найден и синтаксический анализ запущен");
}

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

 - (void) parseXMLFileAtURL: (NSString *) URL 
{
NSString * agentString = @ "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; ru-ru ) AppleWebKit/525.27.1 (KHTML, как Gecko) Версия/3.2.1 Safari/525.27.1 ";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: запрос returningResponse: nil ошибка: nil];
article = [[NSMutableArray alloc] init];
errorParsing = NO;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];
// Возможно, вам придется включить некоторые из них в зависимости от типа файла XML, который вы анализируете
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];
rssP ];
}

Эта функция инструктирует движок загрузить файл по определенному веб-адресу (URL) и запустить процесс его анализа. Мы сообщаем удаленному серверу, что мы Safari, работающий на Mac, на тот случай, если сервер попытается перенаправить iPhone/iPad на мобильную версию.
Параметры в конце относятся к определенным файлам XML. Большинство файлов RSS и общих файлов XML не требуют их включения.

 - (void) анализатор: (NSXMLParser *) анализатор parseErrorOccurn: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "код ошибки% i", [код parseError] ];
NSLog (@ "Ошибка синтаксического анализа XML:% @", errorString);
errorParsing = YES;
}

Это простая маршрутизация с проверкой ошибок это установит двоичное значение, если оно обнаружит ошибку. Здесь вам может понадобиться что-то более конкретное в зависимости от того, что вы делаете. Если вам просто нужно запустить некоторый код после обработки в случае ошибки, двоичная переменная errorParsing может быть вызвана в это время.

 - (void) parser: (NSXMLParser *) parser didStartElement: (NSString * ) elementName namespaceURI: (NSString *) namespaceURI qualName: (NSString *) qName attribute: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString alloc] init]; < br /> if ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];
}
}

Основная часть синтаксического анализатора XML содержит три функции, одна из которых выполняется в начале отдельного элемента, другая – в середине синтаксического анализа элемента, а вторая – в конце элемента.

В этом примере мы будем разбирать файл, похожий на файл RSS, который разбивает элементы на группы под заголовком «элементы» в файле XML. В начале обработки мы проверяем имя элемента «item» и выделяем наш словарь item при обнаружении новой группы. В противном случае мы инициализируем нашу переменную для значения.

 - (void) парсер: (NSXMLParser *) парсер foundCharacters: (NSString *) строка {
[ElementValue appendString: string];
}


Это самая простая часть. Когда мы находим символы, мы просто добавляем их в нашу переменную “ElementValue”.

 - (void) анализатор: (NSXMLParser *) анализатор didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualName: (NSString *) qName {
if ([elementName isEqualToString: @ "item"]) {
[статьи addObject: [копия элемента]];
} else {
[item setObject: ElementValue forKey: elementName];
}
}

Когда мы закончили обработку элемента, нам нужно сделать одну из двух вещей: (1) если конечным элементом является «item», мы закончили нашу группу, поэтому мы добавим наш словарь в наш массив «статей ». Или (2) если элемент не «item», мы установим значение в нашем словаре с ключом, который соответствует имени элемента. (Это означает, что нам не нужна отдельная переменная для каждого поля в XML-файле. Мы можем обрабатывать их немного более динамично.)

 - (void) parserDidEndDocument: (NSXMLParser *) parser {
if (errorParsing == NO)
{
NSLog (@ "Обработка XML выполнена!");
} else {
NSLog (@ "Ошибка при обработке XML");
}
}

Это последняя функция, необходимая для нашей процедуры анализа. Это просто заканчивает документ. Здесь вы разместите любой код, который хотите завершить, или что-то особенное, что вы можете сделать в случае ошибки.

Многие приложения могут захотеть сохранить данные и/или XML-файл в файл на устройстве. Таким образом, если пользователь не подключится к Интернету при следующей загрузке приложения, он все равно сможет получить эту информацию.

Конечно, мы не можем забыть самую важную часть: указание приложению проанализировать файл (и указать ему веб-адрес, чтобы найти его по адресу!).

Чтобы начать процесс, вам просто нужно добавить эту строку кода в соответствующее место, где вы хотите выполнить обработку XML:

 [self parseXMLFileAtURL: @ "http://www.webaddress.com/file.xml"]; 

Оцените статью
Solutics.ru
Добавить комментарий