Перейти к содержимому

xml_parser_create()

Функция xml_parser_create() — это встроенная функция PHP, которая создает новый ресурс парсера XML. Она относится к устаревшему расширению xml и используется для SAX-подобного (управляемого событиями) парсинга. В отличие от современных расширений, таких как SimpleXML или DOMDocument, этот парсер обрабатывает данные XML последовательно, вызывая определенные пользователем функции обратного вызова для элементов, атрибутов и текстовых данных.

Функция xml_parser_create() полезна, когда необходимо потоково обрабатывать большие XML-файлы, извлекать определенные данные без загрузки всего документа в память или обрабатывать XML на низком уровне с использованием событийного подхода.

Синтаксис

Синтаксис функции xml_parser_create() выглядит следующим образом:

Синтаксис функции xml_parser_create()

php
xml_parser_create([$encoding])

Где $encoding — кодировка символов, используемая в данных XML. Этот параметр необязателен.

Примеры использования

Рассмотрим несколько практических примеров использования xml_parser_create() в PHP.

Пример 1: Создание парсера XML

Вы можете использовать функцию xml_parser_create() для инициализации ресурса парсера. Обратите внимание, что создание самого парсера не обрабатывает данные; вам необходимо настроить обработчики и вызвать xml_parse() для фактического разбора XML.

Использование функции xml_parser_create() для создания нового парсера XML в PHP

php
$xml_parser = xml_parser_create();

Этот код создает новый ресурс парсера XML. Сам по себе он представляет собой пустой контейнер, готовый к настройке.

Пример 2: Разбор XML-данных

Чтобы фактически разобрать XML, необходимо настроить обработчики событий и передать данные в парсер с помощью xml_parse().

Использование функции xml_parser_create() для разбора XML-данных в PHP

php
$xml_parser = xml_parser_create();
$xml_data = file_get_contents("data.xml");

// Set up element handlers
xml_set_element_handler($xml_parser, function($parser, $name) {
    echo "Start element: $name\n";
}, function($parser, $name) {
    echo "End element: $name\n";
});

// Parse the data
if (!xml_parse($xml_parser, $xml_data, true)) {
    die(sprintf("XML error: %s at line %d",
        xml_error_string(xml_get_error_code($xml_parser)),
        xml_get_current_line_number($xml_parser)));
}
xml_parser_free($xml_parser);

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

Пример 3: Извлечение данных из XML

Вы можете использовать обработчики текстовых данных для захвата содержимого текста из конкретных тегов во время разбора.

Извлечение данных из XML с помощью расширения xml в PHP

php
$xml_parser = xml_parser_create();
$xml_data = file_get_contents("data.xml");
$current_tag = '';
$extracted_title = '';

xml_set_element_handler($xml_parser, function($parser, $name) use (&$current_tag) {
    $current_tag = $name;
}, function($parser, $name) use (&$current_tag) {
    $current_tag = '';
});

xml_set_character_data_handler($xml_parser, function($parser, $data) use (&$current_tag, &$extracted_title) {
    if ($current_tag === 'title') {
        $extracted_title .= $data;
    }
});

xml_parse($xml_parser, $xml_data);
echo "Extracted title: $extracted_title\n";
xml_parser_free($xml_parser);

Этот код демонстрирует, как захватывать текстовое содержимое из конкретных тегов с помощью xml_set_character_data_handler() и xml_parse(). Обратите внимание, что xml_parser_create() предназначен для событийного разбора и не выполняет проверку схемы. Для валидации по XSD рекомендуется использовать современные расширения, такие как DOMDocument или SimpleXML.

Заключение

В этой статье мы обсудили функцию PHP xml_parser_create() и то, как она может быть использована для создания нового парсера XML в стиле SAX. Мы объяснили, что делает функция, ее синтаксис и привели примеры настройки обработчиков и последовательного разбора XML-данных. Следуя этим примерам, вы сможете эффективно обрабатывать XML-файлы потоково и извлекать конкретные данные в своих PHP-приложениях. Для большинства современных задач рекомендуется использовать SimpleXML или DOMDocument, которые предоставляют высокоуровневые API и встроенную валидацию без необходимости ручной настройки парсера.

Практика

Какой правильный способ создания парсера XML в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.