Возможности синтаксического анализатора и архитектура

Существует два общих подхода к парсингу и обработке XML, каждый с его собственным стилем API:

Класс NSXMLParser принимает событийно-управляемый стиль парсинга. Но вместо того, чтобы использовать обратные вызовы, объект NSXMLParser (или просто, синтаксический анализатор) отправляет сообщения своему делегату; это отправляет различное сообщение за каждым типом парсинга события. Поскольку синтаксический анализатор последовательно встречается с каждым элементом в XML или файле DTD — элемент, атрибут, объявление, ссылка на сущность, и т.д. — это сообщает о нем своему делегату (если делегат реализует связанный метод), вместе с любым окружающим контекстом. Это ничего не делает с элементом кроме отчета это.

Например, скажите, что у Вас есть простой XML-файл, такой как следующее:

<?xml version= “1.0” encoding=”UTF8”>
<article author=”John Doe”>
    <para>This is a very short article.</para>
</article>

Синтаксический анализатор сообщил бы о следующей серии событий его делегату:

  1. Запущенный документ парсинга

  2. Найденный запускают тег для элемента article

  3. Найденный атрибут author из элемента article, значение «Джон Доу»

  4. Найденный запускают тег для элемента para

  5. Найденные символы This is a very short article.

  6. Найденный конечный тэг для элемента para

  7. Найденный конечный тэг для элемента article

  8. Законченный документ парсинга

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

Событийно-управляемый парсинг — потому что это имеет дело только с одной конструкцией XML за один раз и не всеми ими сразу — использует намного меньше памяти, чем основанный на дереве парсинг. Это идеально для ситуаций, где производительность является целью, и модификация проанализированного XML не. Одно такое приложение для событийно-управляемого парсинга ищет репозиторий XML-документов (или даже одного XML-документа с многократными «записями») для определенных элементов и делает что-то с содержанием элемента. Например, Вы могли использовать NSXMLParser для поиска предпочтительных файлов списка свойств на всех машинах в сети Bonjour для сбора информации конфигурации сети.

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

В дополнение к созданию отчетов о событиях парсинга объект NSXMLParser проверяет, что XML или DTD правильно построены. Например, это проверяет, имеет ли тег запуска для элемента соответствующий конечный тэг или присвоили ли атрибуту значение. Если это встречается с синтаксической ошибкой, это прекращает анализировать и сообщает делегату.

Несмотря на то, что синтаксический анализатор «понимает» только XML и DTD как языки разметки, это может проанализировать любую основанную на XML схему языка, такую как RELAX NG и XML-схема.