Парсер XML Expat в PHP
XML Expat — это событийный парсер, который рассматривает XML-документ как последовательность событий. Когда происходит событие, он вызывает указанную функцию для его обработки.
XML Expat также является невалидирующим парсером и игнорирует любые DTD, связанные с документом. Однако, если документ сформирован неправильно, он завершится сообщением об ошибке.
Поскольку он является событийным, невалидирующим парсером, парсер XML Expat быстр и хорошо подходит для веб-приложений.
Посмотрите на следующий фрагмент XML:
<from>Татьяна</from>
Событийный парсер сообщает о приведенном выше XML как о последовательности из 3 событий:
- Начальный элемент: from
- Раздел CDATA: Татьяна
- Конечный элемент: from
Совет: Парсер XML Expat является частью ядра PHP. Установка не требуется!
Парсер XML Expat в PHP - Основные функции
Основные функции парсера XML Expat:
xml_parser_create()- Инициализирует XML-парсерxml_set_element_handler()- Указывает, какую функцию выполнять для открывающих и закрывающих теговxml_set_character_data_handler()- Указывает, какую функцию выполнять для символьных данныхxml_parse()- Запускает процесс синтаксического анализаxml_error_string()- Преобразует XML-ошибку в текстовое описаниеxml_parser_free()- Освобождает выделенную память
Использование парсера XML Expat
XML-файл "note.xml" будет использован в примере ниже.
В следующем примере мы определяем некоторые функции-обработчики, открываем XML-файл, инициализируем парсер XML Expat, а затем выполняем синтаксический анализ XML-файла:
Пример
<?php
// Определяем функции-обработчики
function start($parser, $element_name, $element_attrs) {
switch($element_name) {
case "NOTE":
echo "-- Заметка --<br>";
break;
case "TO":
echo "Кому: ";
break;
case "FROM":
echo "От: ";
break;
case "HEADING":
echo "Заголовок: ";
break;
case "BODY":
echo "Сообщение: ";
}
}
function stop($parser, $element_name) {
echo "<br>";
}
function char($parser, $data) {
echo $data;
}
// Открываем XML-файл для чтения
$stream = fopen("note.xml", "r");
// Инициализируем XML-парсер
$parser = xml_parser_create();
// Устанавливаем обработчики
xml_set_element_handler($parser, "start", "stop");
xml_set_character_data_handler($parser, "char");
// Читаем данные
while ($data = fread($stream, 4096)) {
xml_parse($parser, $data, feof($stream)) or 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-файл
fclose($stream);
?>
Попробуйте сами »
Результатом выполнения приведенного выше кода будет:
-- Заметка --
Кому: Андрей
От: Татьяна
Заголовок: Напоминание
Сообщение: Не забывай меня в эти выходные!
Пояснение к коду
- Создаем функции-обработчики (start(), stop() и char())
- Открываем XML-файл для чтения с помощью функции
fopen() - Инициализируем XML-парсер с помощью функции
xml_parser_create() - Устанавливаем обработчики:
xml_set_element_handler()указывает, какую функцию выполнять для открывающих и закрывающих тегов, аxml_set_character_data_handler()указывает, какую функцию выполнять для символьных данных - Выполняем синтаксический анализ XML-файла с помощью функции
xml_parse() - В случае ошибки добавляем функцию
xml_error_string()для преобразования XML-ошибки в текстовое описание - Освобождаем ресурс XML-парсера с помощью функции
xml_parser_free() - Закрываем XML-файл с помощью функции
fclose()
Справочник парсера XML Expat в PHP
Для получения полного справочника функций парсера XML Expat посетите страницу Справочник парсера XML Expat в PHP.