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.

Dejar un comentario