Saltar al contenido

xml_parser_create_ns()

La función xml_parser_create_ns() es una función integrada de PHP que crea un nuevo analizador XML con soporte para espacios de nombres. Pertenece a la extensión XML Parser y se utiliza al analizar documentos XML. A diferencia de SimpleXML, esta función trabaja con una API de extracción basada en eventos, lo que te permite procesar flujos XML de manera eficiente. Cuando el soporte de espacios de nombres está habilitado, el analizador resuelve automáticamente los prefijos de los espacios de nombres y pasa nombres de elementos estructurados a tus controladores, eliminando la necesidad de resolver los prefijos manualmente.

Sintaxis

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

Sintaxis de la función xml_parser_create_ns() en PHP

php
xml_parser_create_ns(?string $encoding = null, string $namespace_separator = '?')

Donde $encoding es la codificación de caracteres utilizada por los datos XML (por ejemplo, 'UTF-8'), y $namespace_separator es el carácter utilizado para unir los URIs de los espacios de nombres con los nombres locales en las devoluciones de llamada de los controladores (el valor predeterminado es ?). Ambos parámetros son opcionales.

Ejemplos de uso

Veamos ejemplos prácticos del uso de xml_parser_create_ns() en PHP.

Ejemplo 1: Crear un analizador XML

Para crear un analizador, llama a xml_parser_create_ns(). Esto devuelve un recurso de analizador que debe configurarse con controladores de elementos y caracteres antes de analizar.

crear un nuevo analizador XML con soporte para espacios de nombres

php
$parser = xml_parser_create_ns();
// Configure handlers and parse data...

Este código crea un nuevo analizador con el procesamiento de espacios de nombres habilitado. El recurso del analizador se utiliza luego con xml_set_element_handler() y xml_parse() para procesar los datos XML.

Ejemplo 2: Analizar datos XML con prefijos de espacios de nombres

Cuando el soporte de espacios de nombres está habilitado, la extensión XML Parser resuelve automáticamente los prefijos de los espacios de nombres. Los nombres de elementos pasados a los controladores se formatean como namespace_uri?local_name (usando el separador predeterminado). La resolución de espacios de nombres la maneja el propio analizador, no manualmente.

analizar datos XML utilizando la extensión XML Parser

php
$parser = xml_parser_create_ns();
$xml_data = '<?xml version="1.0"?><root xmlns:ns="http://example.com"><ns:child>value</ns:child></root>';

xml_set_element_handler($parser, function($parser, $name) {
    echo "Element: $name\n";
}, function($parser, $name) {
    echo "End Element: $name\n";
});

xml_parse($parser, $xml_data);
xml_parser_free($parser);

Este código crea un analizador, define controladores para capturar los nombres de los elementos y analiza la cadena XML. El nombre del elemento ns:child se resuelve automáticamente y se pasa al controlador como http://example.com?child.

Ejemplo 3: Personalizar la codificación de caracteres y el separador

De forma predeterminada, xml_parser_create_ns() asume que los datos XML utilizan la codificación predeterminada del sistema. Puedes especificar una codificación y un separador de espacios de nombres personalizado para garantizar un manejo correcto de los caracteres y el formato de las devoluciones de llamada.

personalizar la codificación y el separador para un manejo adecuado de los caracteres

php
$parser = xml_parser_create_ns('UTF-8', '|');
$xml_data = '<?xml version="1.0"?><root xmlns:ns="http://example.com"><ns:child>value</ns:child></root>';

xml_set_element_handler($parser, function($parser, $name) {
    echo "Element: $name\n";
}, null);

xml_parse($parser, $xml_data);
xml_parser_free($parser);

Este código crea un analizador con codificación UTF-8 y un separador personalizado |. El recurso del analizador se libera después de su uso para evitar fugas de memoria.

Práctica

¿Qué salida producirá el código PHP proporcionado en la URL enlazada?

¿Te resulta útil?

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