XML y PHP 5

Por el 6 de Agosto de 2007

en: Programacion

A estas alturas seguro que conoces bastantes cosas acerca de PHP 5 y a lo mejor has oído hablar del soporte para el tratamiento de documentos XML que trae está versión de PHP.

Sin duda sorprende todas aquellos desarrolladores que pudiendo haber migrado sus aplicaciones a Php 5 siguen desarrollando en PHP 4, hace poco escribíamos acerca de los motivos de la lenta muerte de PHP 4.

La gran noticia para aquellos que habitualmente trabajais con documentos XML es que PHP 5 trae un buen número de extensiones para trabajar con los documentos XML. El objetivo principal del soporte XML que trae PHP 5 es proporcionar una base sólida de herramientas para trabajar con los documentos XML y además proporcionar una cierta compatibilidad entre las diferentes herramientas.

La meta para la ayuda de XML en PHP 5 era no sólo proporcionar una base sólida de los sistemas de herramienta para trabajar de XML, pero también proporcionar una cierta unidad entre los sistemas de herramienta ellos mismos.

DOM

La revolución de la versión 5 de PHP comienza con la extensión ext/dom, que en PHP 4 estaba plagada de problemas que se fueron solucionando en cada nueva versión.

Veamos unos ejemplos:

Documento XML

<?xml version=”1.0″?>
<article>
<name>XML in PHP 5
<author>Juan Perez
</article>

Ejemplo de Uso en PHP 4

<?php
$doc = domxml_open_file(‘article.xml’);
$root = $doc->document_element();
$node = $root->first_child();

while ($node) {
if (($node->node_type() == XML_ELEMENT_NODE) &&
($node->node_name() == ‘name’)) {
$content = $node->first_child();
$output = $content->node_value();
print “Output: $output
“;
break;
}
$node = $node->next_sibling();
}
?>

Ejemplo de Uso en PHP 5

<?php
$doc = new DOMDocument();
$doc->load(‘article.xml’);
$root = $doc->documentElement;
$node = $root->firstChild;

while ($node) {
if (($node->nodeType == XML_ELEMENT_NODE) &&
($node->nodeName == ‘name’)) {
$content = $node->firstChild;
$output = $content->nodeValue;
print “Output: $output
“;
break;
}
$node = $node->nextSibling;
}
?>

Si comparamos el código para ambos ejemplos vemos que el código es bastante similar.

Una de las pocas diferencias que se pueden apreciar es el cambio de nomenclatura en algunos aspectos del códgio: $node->first_child(); (PHP4) => $node->firstChild; (PHP5).

SimpleXML

Hemos visto que DOM nos permite acceder y manipular los documentos XML de la manera que necesitamos, obviamente esto tiene un precio y este precio está en que la curva de aprendizaje es más pronunciada que en el uso de otras herramientas. SimpleXML nos permite manejar los documentos XML de una manera sencilla e intuitiva, como bien dice su nombre.

La forma en la que trabaja la función es sencilla, convierte el documento XML pasado en el parámetro de la función en un objeto de la clase simplexml_element si no presenta errores:

<?
$noticias = simplexml_load_file(‘rss.xml’);
foreach ($noticias->item as $noticia) {
echo "<b>$noticia->name:</b> ";
echo "$noticia->author<br><br>\n";
}
?>

Cómo se puede ver ahorramos un gran número de líneas de código.

Pero esta extensión es aparte de sencilla una bendición para los desarrolladores que gustan de recuperar información de servicios externos. En muy pocas líneas de código podemos por ejempo usar SimpleXML para acceder a una consulta de búsqueda realizada a Yahoo y recuperar el primer resultado.

<?php
$terms = urlencode(‘tufuncion’);
$url = ‘http://api.search.yahoo.com/WebSearchService/V1/webSearch’;
$query = ‘?appid=demo&query=’.$terms.’&results=1′;

$serviceurl = $url.$query;

$results = simplexml_load_file($serviceurl);

print $results->Result->Title.”
“;
print $results->Result->DisplayUrl.”
“;
?>

La salida por pantalla deberá ser:

TuFuncion
www.tufuncion.com

XMLReader

El trabajo con XMLReader es realmente simple. No hay necesidad de ocuparse de utilidades complejas, únicamente debes indicar el fichero a leer y mediante diferentes condiciones indicar las acciones a realizar.

<?php
$reader = new XMLReader();
$reader->open(‘article.xml’);

while ($reader->read()) {
if ($reader->nodeType == XMLREADER::ELEMENT) {
print $reader->localName;
}
}
?>

article
name
author

XMLWriter

Como su nombre indica se trata de la función análoga a la anterior, seguro que alguna vez has deseado encontrar una manera sencilla e intuitiva para crear tus documentos XML. XMLWriter ha sido creada para ese específico propósito.

<?php
$writer = new XMLWriter();
$writer->openURI(‘php://output’);
$writer->startDocument(“1.0″);
$writer->startElement(“example”);
$writer->startElement(“specchars”);
$writer->text(‘&’);
$writer->endDocument();
$writer->flush();
?>

<?xml version=”1.0″?>
<example><specchars>&</specchars></example>

Una de las mayores ventajas del uso de esta función a la hora de crear nuestros documentos XML es que XMLWriter se encarga de comprobar la correcta estructura del documento y el formato de los datos.

2 Respuestas a XML y PHP 5

Avatar

Anónimo

6 de Agosto de 2007 a las 11:02 am

Muy interesante esto, la verdad es que he trabajado poco con XML y php así que si lo tengo que volver a hacer tendre en cuenta estas herramientas.

Avatar

Anónimo

7 de Agosto de 2007 a las 4:49 am

Como siempre excelente e interesante post. Yo actualmente estoy “anclado” al PHP 4 y creo que debería de hacer un pensamiento. Con posts como estos me das ganas de empezar a mirar las nuevas funcionalidades del PHP 5 y empezar a migrar algunas de las webs que programo. Hace poco he empezado a utilizar la API de google map, a ver si con un poco de suerte puedo usar estas funciones de gestión de XML con esta API… creo que pueden salir cosas bastante interesantes. Ánimo y hasta otro post :D (sobretodo si es de PHP)

Avatar

manu

7 de Agosto de 2007 a las 4:49 am

La API de Google Maps es todo un mundo, yo cuánto más la utilizo más utilidades le veo, se puede aplicar a casi todos los desarrollos.

Avatar

Lord Cold

30 de Noviembre de 2007 a las 11:48 am

Hola, el articulo es muy interesante actualmente estoy empezando a desarrollar en Php, por lo tanto tengo una duda, como puedo hacer que XMLWriter me genere un documento XML, ya que hasta ahora solamente he logrado generarlo en la memoria e imprimirlo en la página y no encuentro la manera de generar el archivo.

Gracias de antemano.

Avatar

gahz

21 de Diciembre de 2007 a las 7:57 pm

Saludos, super sencillo y claro la explicación, para empezar a utilizar PHP con XML, para aplicarlo a RSS

Avatar

Martin Sagastume

12 de Agosto de 2008 a las 12:22 pm

@LordCold

La forma de que se guarde en un archivo es la siguiente:

$writer = new XMLWriter();

$writer->openURI(‘archivo.xml’);

Avatar

bien interesante

5 de Diciembre de 2008 a las 4:46 pm

Muy interesante compadre, pero seria bueno que pusieras los archivos para descargar porque me sale errores.

Avatar

edwin

25 de Octubre de 2008 a las 2:11 pm

Hola como estan, pues miren yo probe el ejemplo de uso con PHP5, y me dio el siguiente error: Warning: domdocument::domdocument() expects at least 1 parameter, 0 given in C:\wamp\www\PROYECTOS_DEL_TRABAJO\importar\ejemplo1.php on line 2

Si alguien sabe como solucionarlo se los agradeceria, ya agregue la extension ext/dom. Pero nose que pasa. Gracias de ante mano

Avatar

Jose

22 de Noviembre de 2008 a las 5:01 am

Hola: quisiera saber si me pueden facilitar algun manual o una direccion web para poder encontrár más informacion sobre este tema ya que estoy bastante interesado en este tema
gracias

Avatar

El Monks

5 de Septiembre de 2008 a las 5:45 pm

Compadre asi es que se debe ayudar a la gente, con un ejemplo claro y directo… felicidades….

Avatar

Paula

19 de Septiembre de 2008 a las 5:35 am

Muchas gracias, muy buen resumen para los que estamos empezando a trabajar con xml

Avatar

Anónimo

11 de Mayo de 2009 a las 10:25 pm

Es bastante tarde la respuesta, pero lo pongo para los que aun la esten buscando en la red.

Este mismo error (y otros como “Fatal error: Call to undefined method domdocument::createElement()…”) me dio a mi, esto se soluciono al deshabilitar la extension php_domxml.dll del archivo php.ini.

Avatar

Anónimo

11 de Mayo de 2009 a las 10:25 pm

Es bastante tarde la respuesta, pero lo pongo para los que aun la esten buscando en la red.

Este mismo error (y otros como “Fatal error: Call to undefined method domdocument::createElement()…”) me dio a mi, esto se soluciono al deshabilitar la extension php_domxml.dll del archivo php.ini.

Dejar un comentario

Patrocinadores

¿Interesado en patrocinar TuFunción?

Suscripción

Primera División