Встроенный парсер Expat позволяет обрабатывать XML-документы на PHP.
XML используется для описания данных, при этом основное внимание уделяется тому, что это за данные. XML-файлы описывают структуру данных.
В XML нет предопределенных тегов. Вы должны определить свои собственные теги.
Чтобы узнать больше о XML, посетите наш учебник по XML.
Чтобы читать и обновлять – создавать и обрабатывать – XML-документ, вам нужен синтаксический анализатор XML.
Существует два основных типа парсеров XML:
Древовидный анализатор: этот анализатор преобразует XML-документы в древовидную структуру. Он анализирует весь документ и обеспечивает доступ к элементам дерева, таким как объектная модель документа (DOM).
Анализатор на основе событий: рассматривает XML-документ как серию событий. Когда происходит определенное событие, синтаксический анализатор вызывает функцию для его обработки.
Парсер Expat — это парсер, основанный на событиях.
Анализаторы на основе событий фокусируются на содержимом XML-документов, а не на их структуре. Из-за этого анализаторы на основе событий могут получать доступ к данным быстрее, чем анализаторы на основе дерева.
См. следующий фрагмент XML:
<from>Яни</from>
Анализатор на основе событий сообщает приведенный выше XML как последовательность трех событий:
Начальный элемент: от
Начало раздела CDATA, значение: Jani
Закрыть элемент: от
Приведенный выше пример XML содержит правильно сформированный XML. Однако этот экземпляр является недопустимым XML, поскольку с ним не связано объявление типа документа (DTD).
Однако это не имеет никакого значения при использовании парсера Expat. Expat — это парсер, который не проверяет достоверность и игнорирует любые DTD.
Expat — основанный на событиях непроверенный анализатор XML, быстрый и легкий, что делает его идеальным для веб-приложений PHP.
Примечание. XML-документ должен быть правильно сформирован, иначе Expat выдаст ошибку.
Функция парсера XML Expat является неотъемлемой частью ядра PHP. Для использования этих функций установка не требуется.
В нашем примере будет использоваться следующий XML-файл:
<?xml version="1.0"coding="ISO-8859-1"?><note><to>Тове</to><from>Яни</from><heading>Напоминание</heading><body>Дон не забудь меня на этих выходных!</body></note>
Нам нужно инициализировать парсер XML в PHP, определить обработчики для различных событий XML, а затем проанализировать XML-файл.
<?php//Инициализировать синтаксический анализатор XML$parser=xml_parser_create();//Функция, используемая в начале элементаfunction start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- Примечание --<br>"; разрыв случая "TO": echo "To: "; разрыв; случай "FROM": echo "From: "; "HEADING": echo "Heading: ";break; case "BODY": echo "Message: " } }//Функция для использования в конце элементаfunction stop($parser,$element_name) { echo "<br> "; }//Функция, используемая при поиске символьных данныхfunction char($parser,$data) { echo $data; }//Укажите элемент handlerxml_set_element_handler($parser,"start","stop");//Укажите обработчик данныхxml_set_character_data_handler($parser,"char");//Откройте XML-файл$fp=fopen("test.xml","r");/ /Читать данные пока ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) или die (sprintf("Ошибка XML: %s в строке %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))) }/ /Освободить XML-парсерxml_parser_free($parser);?>
Приведенный выше код выведет:
-- Примечание --Кому: ТувеОт: ЯниЗаголовок: НапоминаниеСообщение: Не забудь меня на этих выходных!
Как это работает:
Инициализируйте парсер XML с помощью функции xml_parser_create().
Создавайте функции, которые работают с разными обработчиками событий.
Добавьте функцию xml_set_element_handler(), чтобы определить, какую функцию выполнять, когда синтаксический анализатор обнаруживает открывающий и закрывающий теги.
Добавьте функцию xml_set_character_data_handler(), чтобы определить, какую функцию выполнять, когда синтаксический анализатор обнаруживает символьные данные.
Разберите файл «test.xml» с помощью функции xml_parse().
В случае ошибок добавьте функцию xml_error_string() для преобразования ошибок XML в текстовые описания.
Вызовите функцию xml_parser_free(), чтобы освободить память, выделенную для функции xml_parser_create().
Чтобы узнать больше о функции PHP Expat, посетите наше справочное руководство PHP XML Parser.