El analizador Expat integrado permite procesar documentos XML en PHP.
XML se utiliza para describir datos, centrándose en qué son los datos. Los archivos XML describen la estructura de los datos.
En XML, no hay etiquetas predefinidas. Debes definir tus propias etiquetas.
Para obtener más información sobre XML, visite nuestro tutorial XML.
Para leer y actualizar (crear y procesar) un documento XML, necesita un analizador XML.
Hay dos tipos básicos de analizadores XML:
Analizador basado en árbol: este analizador convierte documentos XML en una estructura de árbol. Analiza todo el documento y proporciona acceso a elementos del árbol, como el Modelo de objetos de documento (DOM).
Analizador basado en eventos: trata un documento XML como una serie de eventos. Cuando ocurre un evento específico, el analizador llama a una función para manejarlo.
El analizador Expat es un analizador basado en eventos.
Los analizadores basados en eventos se centran en el contenido de los documentos XML más que en su estructura. Debido a esto, los analizadores basados en eventos pueden acceder a los datos más rápido que los analizadores basados en árboles.
Consulte el siguiente fragmento XML:
<de>Jani</de>
El analizador basado en eventos informa el XML anterior como una secuencia de tres eventos:
Elemento inicial: desde
Iniciar sección CDATA, valor: Jani
Elemento cercano: desde
El ejemplo XML anterior contiene XML bien formado. Sin embargo, esta instancia no es XML válida porque no tiene ninguna declaración de tipo de documento (DTD) asociada.
Sin embargo, esto no supone ninguna diferencia cuando se utiliza el analizador Expat. Expat es un analizador que no comprueba la validez e ignora cualquier DTD.
Como analizador XML no validado y basado en eventos, Expat es rápido y liviano, lo que lo hace ideal para aplicaciones web PHP.
Nota: El documento XML debe estar bien formado o Expat generará un error.
La función del analizador XML Expat es una parte integral del núcleo de PHP. No se requiere instalación para utilizar estas funciones.
En nuestro ejemplo se utilizará el siguiente archivo XML:
<?xml version="1.0" encoding="ISO-8859-1"?><note><to>Tove</to><from>Jani</from><heading>Recordatorio</heading><body>Don ¡No me olvides este fin de semana!</body></note>
Necesitamos inicializar el analizador XML en PHP, definir controladores para diferentes eventos XML y luego analizar el archivo XML.
<?php//Inicializa el analizador XML$parser=xml_parser_create();//Función a usar al inicio de un elementofunction start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTA": echo "-- Nota --<br>"; break; case "TO": echo "Para: "; break case "DESDE": echo "From: "; "ENCABEZAMIENTO": echo "Encabezado: "; break; case "BODY": echo "Mensaje: "; } }//Función a utilizar al final de una función de elemento stop($parser,$element_name) { echo "<br> "; }//Función a utilizar al buscar datos de caracteresfunction char($parser,$data) { echo $data; }//Especificar elemento handlerxml_set_element_handler($parser,"start","stop");//Especificar datos handlerxml_set_character_data_handler($parser,"char");//Abrir archivo XML$fp=fopen("test.xml","r");/ /Leer datos mientras ($datos=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) o die (sprintf("Error XML: %s en la línea %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser)) }/ /Liberar el analizador XMLxml_parser_free($parser);?>
El código anterior generará:
-- Nota --Para: ToveDe: JaniEncabezado: Mensaje recordatorio: ¡No me olvides este fin de semana!
Cómo funciona:
Inicialice el analizador XML mediante la función xml_parser_create()
Cree funciones que funcionen con diferentes controladores de eventos
Agregue la función xml_set_element_handler() para definir qué función ejecutar cuando el analizador encuentre las etiquetas de apertura y cierre
Agregue la función xml_set_character_data_handler() para definir qué función ejecutar cuando el analizador encuentre datos de caracteres
Analice el archivo "test.xml" mediante la función xml_parse()
En caso de errores, agregue la función xml_error_string() para convertir errores XML en descripciones de texto
Llame a la función xml_parser_free() para liberar la memoria asignada a la función xml_parser_create()
Para obtener más información sobre la función PHP Expat, visite nuestro manual de referencia del analizador PHP XML.