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

xml_set_unparsed_entity_decl_handler()

Функция xml_set_unparsed_entity_decl_handler() — это встроенная функция PHP, которая устанавливает пользовательскую функцию обратного вызова в качестве обработчика объявлений непарсируемых сущностей в парсере XML. Она относится к расширению XML Parser и работает исключительно с парсером в стиле SAX, а не с SimpleXML. Этот обработчик полезен, когда необходимо обрабатывать непарсируемые сущности (например, бинарные данные, такие как изображения или PDF-файлы, на которые ссылается XML) без загрузки их в память.

Синтаксис

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

синтаксис функции xml_set_unparsed_entity_decl_handler() в PHP

php
xml_set_unparsed_entity_decl_handler($parser, $handler)

Где $parser — это ресурс парсера XML, для которого устанавливается обработчик, а $handler — имя пользовательской функции обратного вызова, которая будет обрабатывать объявления непарсируемых сущностей.

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

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

Пример: Установка функции-обработчика объявлений непарсируемых сущностей

Предположим, у вас есть XML-документ, содержащий объявление непарсируемой сущности. Вы можете использовать функцию xml_parser_create() для создания нового SAX-парсера, установить обработчик с помощью xml_set_unparsed_entity_decl_handler(), а затем разобрать XML-данные:

Установка функции-обработчика объявлений непарсируемых сущностей в PHP

php
function handle_unparsed_entity($parser, $name, $base, $systemId, $publicId, $notationName) {
    echo "Unparsed entity '$name' found: $systemId (notation: $notationName)\n";
}

$xml_parser = xml_parser_create();
xml_set_unparsed_entity_decl_handler($xml_parser, "handle_unparsed_entity");

$xml_data = '<?xml version="1.0"?>
<!DOCTYPE root [
  <!ENTITY logo SYSTEM "logo.png" NDATA png>
]>
<root/>';

xml_parse($xml_parser, $xml_data, true);
xml_parser_free($xml_parser);

Этот код создает новый SAX-парсер с помощью xml_parser_create(). Затем он регистрирует обратную функцию handle_unparsed_entity() для обработки объявлений непарсируемых сущностей. Когда xml_parse() обрабатывает строку XML, обратная функция выполняется и выводит детали сущности. Вы можете изменить обратную функцию, чтобы извлечь конкретную информацию или выполнить любые другие необходимые действия.

Заключение

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

Практика

В чем назначение функции xml_set_unparsed_entity_decl_handler в PHP?

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

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