Saltar al contenido

xml_parse()

¿Qué es xml_parse()?

La función xml_parse() es una función integrada de PHP que analiza datos XML. Pertenece a la extensión XML Parser de PHP e implementa un analizador de transmisión (streaming parser) de estilo SAX (Simple API for XML). A diferencia de los analizadores basados en árboles, procesa XML de forma secuencial, activando funciones de devolución de llamada (callbacks) a medida que encuentra elementos, atributos y datos de caracteres. Esto lo hace altamente eficiente para analizar archivos XML grandes sin cargar todo el documento en la memoria.

La función xml_parse() es útil cuando necesitas analizar datos XML en PHP, por ejemplo, para extraer datos de un archivo XML, transformar datos XML a otro formato o procesar transmisiones XML en tiempo real.

Sintaxis

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


php
xml_parse($parser, $data, $is_final = false)

Donde $parser es el recurso del analizador XML devuelto por la función de inicialización del analizador XML, como xml_parser_create(), $data son los datos XML que se van a analizar y $is_final es un parámetro opcional que indica si los $data proporcionados son el último fragmento de datos que se va a analizar.

Ejemplos de uso

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

Ejemplo 1: Análisis de datos XML

Supongamos que tienes un archivo XML "data.xml" que deseas analizar usando la extensión XML Parser de PHP. Puedes usar la función xml_parse() para analizar los datos XML, de la siguiente manera:


php
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
$xml_data = file_get_contents("data.xml");
if (!xml_parse($xml_parser, $xml_data, true)) {
  $error_message = xml_error_string(xml_get_error_code($xml_parser));
  $error_line = xml_get_current_line_number($xml_parser);
  echo "XML Parsing Error: $error_message at line $error_line";
}
xml_parser_free($xml_parser);

Este código crea un analizador XML usando xml_parser_create() y establece una opción para desactivar la conversión de caso. Luego lee el archivo XML "data.xml" y almacena su contenido en la variable $xml_data. Utiliza xml_parse() para analizar los datos XML y verifica si ocurrió un error durante el proceso de análisis mediante el valor de retorno de xml_parse(). Si ocurre un error, obtiene el código de error usando xml_get_error_code() y el mensaje de error usando xml_error_string(), e imprime un mensaje de error en la consola que incluye el mensaje y el número de línea del error. Finalmente, libera la memoria utilizada por el analizador XML usando xml_parser_free().

Ejemplo 2: Análisis de XML con controladores de eventos

La función xml_parse() está diseñada para trabajar con controladores de eventos. Al registrar funciones de devolución de llamada, puedes procesar elementos y datos XML a medida que se encuentran durante la transmisión.


php
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);

// Define handler functions
function startElement($parser, $name, $attrs) {
    echo "Start element: $name\n";
}
function endElement($parser, $name) {
    echo "End element: $name\n";
}
function characterData($parser, $data) {
    echo "Data: $data\n";
}

// Set handlers
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");

$xml_data = file_get_contents("data.xml");
if (!xml_parse($xml_parser, $xml_data, true)) {
    $error_message = xml_error_string(xml_get_error_code($xml_parser));
    $error_line = xml_get_current_line_number($xml_parser);
    echo "XML Parsing Error: $error_message at line $error_line";
}
xml_parser_free($xml_parser);

Este código crea un analizador XML usando xml_parser_create() y establece una opción para desactivar la conversión de caso. Luego define tres funciones de devolución de llamada: startElement() para etiquetas de apertura, endElement() para etiquetas de cierre y characterData() para el contenido de texto. Estos controladores se registran usando xml_set_element_handler() y xml_set_character_data_handler().

El script lee "data.xml" y lo pasa a xml_parse(). A medida que el analizador transmite el XML, llama automáticamente a los controladores registrados. Si ocurre un error durante el análisis, el código obtiene el código y el mensaje de error usando xml_get_error_code() y xml_error_string(), y muestra un error descriptivo. Finalmente, libera la memoria del analizador con xml_parser_free().

Conclusión

En este artículo, hemos discutido la función xml_parse() de PHP y cómo se puede utilizar para analizar datos XML. Hemos explicado que pertenece a la extensión XML Parser (estilo SAX), cubierto su sintaxis y proporcionado ejemplos de análisis básico e implementación de controladores basados en eventos. Siguiendo estos ejemplos, puedes analizar datos XML de manera eficiente, extraer información de archivos XML o procesar grandes transmisiones XML en tus aplicaciones PHP.

Práctica

¿Qué es el Analizador XML en PHP?

¿Te resulta útil?

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