iOS. Приемы программирования
Шрифт:
11.12. Синтаксический разбор XML с помощью NSXMLParser
Постановка задачи
Необходимо выполнить синтаксический разбор (парсинг) фрагмента кода на языке XML или XML-документа.
Решение
Воспользуйтесь классом NSXMLParser.
Обсуждение
Для синтаксического разбора XML-содержимого класс NSXMLParser использует делегат. Создадим простой XML-файл, содержащий следующие данные (сохраните этот файл в вашем проекте как MyXML.xml):
Кроме того, как видите, я определил делегат моего приложения как делегат XML-парсера, который подчиняется протоколу NSXMLParserDelegate. Согласно этому протоколу, объект делегата XML-парсера должен относиться к типу NSXMLParser. Cчитаем с диска файл MyXML.xml и передадим его на обработку в XML-парсер:
Сначала
Для синтаксического разбора XML-файла необходимо знать методы делегатов, определенные в протоколе NSXMLParserDelegate, а также понимать, за что они отвечают:
• parserDidStartDocument: — вызывается при запуске синтаксического разбора;
• parserDidEndDocument: — вызывается по окончании синтаксического разбора;
• parser: didStartElement: namespaceURI: qualifiedName: attributes: — вызывается, когда парсер встречает и начинает разбирать новый элемент в XML-документе;
• parser: didEndElement: namespaceURI: qualifiedName: — вызывается, когда парсер завершает синтаксический разбор текущего элемента;
• parser: foundCharacters: — вызывается, когда парсер анализирует строковое содержимое элементов.
С помощью этих методов делегата можно определить объектную модель для XML-объектов. Сначала определим объект, который будет представлять XML-элемент. Сделаем это в классе XMLElement:
Мы хотим, чтобы изменяемый массив subElements создавался лишь тогда, когда при достижении этой точки в коде мы имеем значение nil. Поэтому код для выделения и инициализации свойства subElements класса XMLElement поместим в его собственном методе-получателе. Если у XML-элемента нет дочерних элементов, то использовать это свойство не придется. Ведь отсутствует точка, в которой можно было бы выделить и инициализировать изменяемый массив для данного элемента. Такая техника называется «ленивое выделение» (Lazy Allocation).
Деревья и кустарники для любительского садоводства и озеленения
Справочная литература:
прочая справочная литература
рейтинг книги
Политология: учебник для студентов вузов
Научно-образовательная:
политика
рейтинг книги
Господин из завтра. Тетралогия.
Фантастика:
альтернативная история
рейтинг книги
Принадлежать им
Любовные романы:
современные любовные романы
рейтинг книги
Земля незнаемая
Проза:
историческая проза
рейтинг книги
Изменяющий-Механик. Компиляция. Книги 1-18
Собрание сочинений
Фантастика:
боевая фантастика
космическая фантастика
рейтинг книги
Очерки времён и событий из истории российских евреев том 4
Научно-образовательная:
история
рейтинг книги
Моров. Том 3
2. Моров
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Pinnacle Studio 11
Видеосамоучитель
Компьютеры и Интернет:
программное обеспечение
рейтинг книги
Истории от первого лица (Повести. Рассказы)
Проза:
советская классическая проза
рейтинг книги
Восточный массаж
Дом и Семья:
здоровье и красота
рейтинг книги
После Кастанеды: дальнейшее исследование
Религия и эзотерика:
эзотерика
рейтинг книги