Saltar al contenido

xml_set_unparsed_entity_decl_handler()

La función xml_set_unparsed_entity_decl_handler() es una función integrada de PHP que establece una devolución de llamada definida por el usuario como controlador para declaraciones de entidades sin procesar en un analizador XML. Pertenece a la extensión XML Parser y funciona exclusivamente con el analizador estilo SAX, no con SimpleXML. Este controlador es útil cuando necesitas procesar entidades sin procesar (como datos binarios como imágenes o PDFs referenciados en XML) sin cargarlas en la memoria.

Sintaxis

La sintaxis de la función xml_set_unparsed_entity_decl_handler() es la siguiente:

Sintaxis de la función xml_set_unparsed_entity_decl_handler() en PHP

php
xml_set_unparsed_entity_decl_handler($parser, $handler)

Donde $parser es el recurso del analizador XML en el que se establece el controlador, y $handler es el nombre de la función de devolución de llamada definida por el usuario que manejará las declaraciones de entidades sin procesar.

Ejemplos de uso

Veamos un ejemplo práctico del uso de xml_set_unparsed_entity_decl_handler() en PHP.

Ejemplo: Establecer una función controladora de declaraciones de entidades sin procesar

Supongamos que tienes un documento XML que contiene una declaración de entidad sin procesar. Puedes usar la función xml_parser_create() para crear un nuevo analizador SAX, establecer el controlador usando xml_set_unparsed_entity_decl_handler() y luego analizar los datos XML:

Establecer una función controladora de declaraciones de entidades sin procesar en 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);

Este código crea un nuevo analizador SAX utilizando xml_parser_create(). Luego registra la devolución de llamada handle_unparsed_entity() para procesar las declaraciones de entidades sin procesar. Cuando xml_parse() procesa la cadena XML, la devolución de llamada se ejecuta y muestra los detalles de la entidad. Puedes modificar la devolución de llamada para extraer información específica o realizar cualquier otra acción necesaria.

Conclusión

En este artículo, hemos discutido la función xml_set_unparsed_entity_decl_handler() de PHP y cómo se integra con el analizador XML estilo SAX. Hemos explicado qué son las entidades sin procesar, revisado la sintaxis de la función y proporcionado un ejemplo completo y ejecutable. Al utilizar este controlador en tus aplicaciones PHP, puedes procesar de manera eficiente las referencias a datos binarios en XML sin cargarlas en la memoria.

Práctica

¿Cuál es la función de la función xml_set_unparsed_entity_decl_handler en PHP?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.