XML y PHP

Una de las tecnologías más necesarias hoy en día y en el futuro en la mayoría de los portales de Internet que manejan información es XML. XML basado en SGML al igual que HTML es un lenguaje que permite definir otros lenguajes de tipo Mark-UP como por ejemplo HTML. El objetivo de XML es proveer a la Web de un lenguaje standard fuertemente estructurado que permita estructurar contenidos.

En XML los documentos pueden ser validados contra un “DTD” (document type definition) para verificar si cumplen lo que dicho DTD determina. El intercambio de DTDs entre distintas instituciones es un buen medio de intercambiar informacion y poder validarla.

PHP provee funciones que permiten parsear documentos XML mediante la biblioteca “Expat” que puede conseguirse libremente en caso de ser necesario, aquellos que usen Apache como Web Server ya tienen expat en forma default.

PHP provee mediante expat un parser XML que puede configurarse para usar “handlers” específicos que manejen los distintos tipos de tags XML, para configurar handlers para los distintos tipos de tags se utilizan las siguientes funciones.

Notar que las funciones que describimos arriba no son los handlers sino las funciones que permiten definir los handlers a asociar con cada eventos (son funciones de binding).

Element Handlers: xml_set_element_handler (parser_handler, string startElementHandler, string endElementHandler)

La función xml_set_element_handler recibe como parámetros un parser_xml (creado con xml_parser_create) y el nombre de dos funciones que serán los handlers a aplicar cuando se encuentren tags XML, la función necesita el nombre de dos funciones, una para cuando el tag xml abre y otra para cuando el tag xml cierra.

La función startElementHandler debe tener el siguiente prototipo:

boolean=element_start_handler(parser_handler,string_tag,attribs)
boolean=element_end_handler(parser_handler,string_tag)

La función recibe el tag en cuestión y si es un tag que abre recibe los parámetros del tag en caso de estar presentes en un vector asociativo como tercer parámetro. Un ejemplo de tag con atributos es:

En cuyo caso el nombre del tag es “INFO” y además se recibe un asociativo de la forma:

(“code”=>”1234”, “name”=>” foo”)

Como es de esperar los handlers para tags que cierran no reciben atributos. Se supone que las funciones devuelve true si el parser_handler corresponde a un parser y false en caso contrario.

Fuente: Documento Generación de web sites dinámicos usando PHP