Analizador Expat XML en PHP

El analizador Expat integrado permite procesar documentos XML en PHP.

¿Qué es XML?

¿Qué es XML? Se utiliza para describir datos, enfocándose en lo que son los datos. El archivo XML describe la estructura de los datos.

En XML, no hay etiquetas predefinidas. Debe definir sus propias etiquetas.

Si desea aprender más sobre XML, visite nuestro Tutoriales XML.

¿Qué es Expat?

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 árboles: este analizador convierte el documento XML en una estructura en forma de árbol. Analiza todo el documento y proporciona una API para acceder a los elementos del árbol, como el modelo de objetos de documento (DOM).
  • Analizador basado en eventos: considera el documento XML como una serie de eventos. Cuando ocurre un evento específico, el analizador llama a una función para procesarlo.

Analizador basado en eventos

El analizador basado en eventos se centra en el contenido del documento XML, en lugar de en sus resultados. Por esta razón, el analizador basado en eventos puede acceder más rápido a los datos que los analizadores basados en árboles.

Vea el siguiente fragmento XML:

<from>John</from>

El analizador basado en eventos reporta el XML superior como una serie de tres eventos:

  • Inicio del elemento: from
  • Inicio del segmento CDATA, valor: John
  • Cierre del elemento: from

El ejemplo XML anterior contiene XML bien formado. Sin embargo, este ejemplo es XML no válido, ya que no tiene declaración de tipo de documento (DTD) asociada, ni DTD interna.

Sin embargo, no hay diferencia al usar el analizador Expat. Expat es un analizador que no verifica la validez, ignora cualquier DTD.

Como analizador XML basado en eventos y no verificado, Expat es rápido y ligero, muy adecuado para aplicaciones web de PHP.

Notas:El documento XML debe estar bien formado, de lo contrario, Expat generará errores.

Instalación

El analizador XML Expat es una parte integral del núcleo de PHP. Puede usar estas funciones sin necesidad de instalarlas.

Archivo XML

En nuestro ejemplo, utilizaremos el siguiente archivo XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Recordatorio</heading>
<body>¡No olvide la reunión!</body>
</note>

Inicializar el analizador XML

Necesitamos inicializar el analizador XML en PHP, definir procesadores para diferentes eventos XML y luego analizar este archivo XML.

Ejemplo

<?php
//Inicializar el analizador XML
$parser=xml_parser_create();
//Función a usar al inicio de un elemento
function start($parser,$element_name,$element_attrs)
  {
  switch($element_name)
    {
    case "NOTE":
    echo "-- Nota --<br />";
    break; 
    case "TO":
    echo "Para: ";
    break; 
    case "FROM":
    echo "De: ";
    break; 
    case "HEADING":
    echo "Título: ";
    break; 
    case "BODY":
    echo "Mensaje: ";
    }
  }
//Función a usar al final de un elemento
function stop($parser,$element_name)
  {
  echo "<br />";
  }
//Función a usar al encontrar datos de caracteres
function char($parser,$data)
  {
  echo $data;
  }
//Especificar manejador de elementos
xml_set_element_handler($parser,"start","stop");
//Especificar manejador de datos
xml_set_character_data_handler($parser,"char");
//Abrir archivo XML
$fp=fopen("test.xml","r");
//Leer datos
while ($data=fread($fp,4096))
  {
  xml_parse($parser,$data,feof($fp)) or 
  die (sprintf("Error de XML: %s en la línea %d", 
  xml_error_string(xml_get_error_code($parser)),
  xml_get_current_line_number($parser)));
  }
//Liberar el analizador XML
xml_parser_free($parser);
?>

Salida del código anterior:

-- Nota --
Para: George
De: John
Título: Recordatorio
Mensaje: ¡No olvide la reunión!

Explicación del funcionamiento:

  • Inicialice el analizador XML utilizando la función xml_parser_create()
  • Crear funciones que se ajusten a diferentes programas de manejo de eventos
  • Agregue la función xml_set_element_handler() para definir qué función se ejecutará cuando el analizador encuentre etiquetas de inicio y final
  • Agregue la función xml_set_character_data_handler() para definir qué función se ejecutará cuando el analizador encuentre datos de caracteres
  • Para analizar el archivo "test.xml", utilice la función xml_parse()
  • En caso de errores, agregue la función xml_error_string() para convertir los 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()

Más información sobre el analizador PHP Expat

Para obtener más información sobre las funciones PHP Expat, visite nuestro manual de referencia de PHP XML Parser.