xml_parse

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_parseЗапускает разбор XML-документа

Описание

xml_parse(XMLParser $parser, string $data, bool $is_final = false): int

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

Список параметров

parser

Ссылка на XML-анализатор.

data

Часть данных для разбора. Для разбора документа по частям функцию xml_parse() вызывают несколько раз с новыми данными, пока аргумент is_final не получит значение true, это сообщит анализатору, что разбирается последняя часть документа.

is_final

При установке значения true функция расценивает значение параметра data как последнюю часть разбора.

Возвращаемые значения

Функция возвращает значение 1, если выполнилась успешно, иначе значение 0.

При ошибках разбора информацию об ошибках получают функциями xml_get_error_code(), xml_error_string(), xml_get_current_line_number(), xml_get_current_column_number() и xml_get_current_byte_index().

Замечание:

Отдельные ошибки наподобие ошибок при разборе сущностей выдаются в конце разбора и получить такие ошибки получится только при установке для параметра is_final значения true.

Список изменений

Версия Описание
8.0.0 Параметр parser ожидает экземпляр класса XMLParser; раньше параметр ждал корректный xml-ресурс (resource).

Примеры

Пример #1 Пример разбора по частям больших XML-документов

Следующий пример показывает, как считывать и разбирать по частям большие XML-документы, поэтому не требуется держать весь документ в памяти. Обработку ошибок в примере опустили для краткости.

<?php

$stream
= fopen('examples/book-simple.xml', 'r');
$parser = xml_parser_create();

xml_set_element_handler(
$parser,
function (
$parser, $name, $attributes) {
echo
$name, PHP_EOL;
},
function (
$parser, $name) {
echo
$name, PHP_EOL;
}
);

while ((
$data = fread($stream, 16384))) {
xml_parse($parser, $data); // Разобрать текущую часть
}
xml_parse($parser, '', true); // Завершить разбор
xml_parser_free($parser);
fclose($stream);