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

xml_parse()

Что такое xml_parse()?

Функция xml_parse() — это встроенная функция PHP для парсинга XML-данных. Она входит в состав расширения XML Parser для PHP и реализует потоковый парсер в стиле SAX (Simple API for XML). В отличие от парсеров, основанных на дереве, она обрабатывает XML последовательно, вызывая функции обратного вызова при обнаружении элементов, атрибутов и текстовых данных. Это делает её высокоэффективной для обработки больших XML-файлов без загрузки всего документа в память.

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

Синтаксис

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


php
xml_parse($parser, $data, $is_final = false)

Где $parser — это ресурс парсера XML, возвращаемый функцией инициализации парсера XML, такой как xml_parser_create(), $data — данные XML для парсинга, а $is_final — необязательный параметр, указывающий, являются ли переданные $data последними данными для парсинга.

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

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

Пример 1: Парсинг XML-данных

Предположим, у вас есть XML-файл "data.xml", который вы хотите распарсить с помощью расширения XML Parser для PHP. Вы можете использовать функцию xml_parse() для парсинга XML-данных следующим образом:


php
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
$xml_data = file_get_contents("data.xml");
if (!xml_parse($xml_parser, $xml_data, true)) {
  $error_message = xml_error_string(xml_get_error_code($xml_parser));
  $error_line = xml_get_current_line_number($xml_parser);
  echo "XML Parsing Error: $error_message at line $error_line";
}
xml_parser_free($xml_parser);

Этот код создает парсер XML с помощью xml_parser_create() и устанавливает опцию для отключения преобразования регистра. Затем он читает XML-файл "data.xml" и сохраняет его содержимое в переменную $xml_data. Для парсинга XML-данных используется xml_parse(), а наличие ошибок в процессе парсинга проверяется по возвращаемому значению xml_parse(). Если возникает ошибка, с помощью xml_get_error_code() и xml_error_string() извлекаются код и сообщение об ошибке, после чего в консоль выводится сообщение об ошибке, содержащее текст ошибки и номер строки. В завершение память, занятая парсером XML, освобождается с помощью xml_parser_free().

Пример 2: Парсинг XML с обработчиками событий

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


php
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);

// Define handler functions
function startElement($parser, $name, $attrs) {
    echo "Start element: $name\n";
}
function endElement($parser, $name) {
    echo "End element: $name\n";
}
function characterData($parser, $data) {
    echo "Data: $data\n";
}

// Set handlers
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");

$xml_data = file_get_contents("data.xml");
if (!xml_parse($xml_parser, $xml_data, true)) {
    $error_message = xml_error_string(xml_get_error_code($xml_parser));
    $error_line = xml_get_current_line_number($xml_parser);
    echo "XML Parsing Error: $error_message at line $error_line";
}
xml_parser_free($xml_parser);

Этот код создает парсер XML с помощью xml_parser_create() и устанавливает опцию для отключения преобразования регистра. Затем определяются три функции обратного вызова: startElement() для открывающих тегов, endElement() для закрывающих тегов и characterData() для текстового содержимого. Эти обработчики регистрируются с помощью xml_set_element_handler() и xml_set_character_data_handler().

Скрипт читает "data.xml" и передает его в xml_parse(). По мере того как парсер обрабатывает XML в потоке, он автоматически вызывает зарегистрированные обработчики. Если в процессе парсинга возникает ошибка, код извлекает код и сообщение об ошибке с помощью xml_get_error_code() и xml_error_string(), а затем выводит подробное сообщение об ошибке. В завершение память парсера освобождается с помощью xml_parser_free().

Заключение

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

Практика

What is XML Parser in PHP?

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

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