W3docs

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 de espacios de nombres.

La función xml_parser_create_ns() es una función integrada de PHP que crea un nuevo analizador XML con soporte de 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 permite procesar flujos XML de manera eficiente. Cuando el soporte de espacios de nombres está habilitado, el analizador resuelve automáticamente los prefijos de espacio de nombres y pasa nombres de elementos estructurados a los manejadores, eliminando la necesidad de resolución manual de prefijos.

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

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 las URIs de espacio de nombres con los nombres locales en los callbacks de los manejadores (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, llame a xml_parser_create_ns(). Esto devuelve un recurso de analizador que debe configurarse con manejadores de elementos y caracteres antes del análisis.

crear un nuevo analizador XML con soporte de espacios de nombres

$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 datos XML.

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

Cuando el soporte de espacios de nombres está habilitado, la extensión XML Parser resuelve automáticamente los prefijos de espacio de nombres. Los nombres de elementos pasados a los manejadores tienen el formato namespace_uri?local_name (usando el separador predeterminado). La resolución de espacios de nombres es gestionada por el propio analizador, no de forma manual.

analizar datos XML usando la extensión XML Parser

$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 manejadores para capturar nombres de elementos y analiza la cadena XML. El nombre del elemento ns:child se resuelve automáticamente y se pasa al manejador 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. Puede especificar una codificación y un separador de espacio de nombres personalizado para garantizar el manejo correcto de caracteres y el formato de los callbacks.

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

$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

Práctica
¿Qué salida producirá el código PHP proporcionado en la URL vinculada?
¿Qué salida producirá el código PHP proporcionado en la URL vinculada?
Was this page helpful?