Crear XML con PHP (III)

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

En el artículo anterior vimos el uso de las funcionalidades básicas que nos aporta la clase XMLWriter. Con lo que tenemos en ese post podremos resolver nuestras necesidades en el 80% de los casos, o más. De hecho, yo sólo he necesitado en una ocasión llegar a “algo más”. No obstante, aquí vamos a ver ese “algo más” por si pudiera hacerte falta.

COMENTARIOS

Es posible agregar comentarios a un XML para documentar la lectura por parte del destinatario de dicho XML. Por supuesto, si el “destinatario” es un proceso automatizado (lo que suele ser la mayoria de los casos), los comentarios sobran, y no serán procesados. Sin embargo, cuando el XML debe ser visualizado para humanos (por ejemplo, renderizado en un navegador u otra herramienta de visualización), los comentarios pueden ser de gran ayuda.

Un comentario en XML tiene el mismo formato que en HTML:

<!-- Esto es un comentario. -->

Podemos ponerlo de dos formas, con una sóla línea, con el método XMLWriter::wirteComment(), que recibe, cómo argumento, el texto del comentario, bien como tal texto o cómo una variable:

$objetoXML->writeComment("Esto es un comentario");

La otra forma de incluirlo es en tres líneas, mediante el uso de los métodos XMLWriter::startComment(), XMLWriter::text() y XML::endComment(), como vemos a continuación:

$objetoXML->startComment();
$objetoXML->text("Esto es un comentario.");
$objetoXML->endComment();

USO DE CDATA

Cómo sabes, CDATA es un modo de introducir, dentro de un XML, código que no responde a este formato. Por ejemplo, HTML para visualizar en un navegador. Un artefacto que emplees como analizador XML ignorará dicha sección. Una sección CDATA se encierra entre las etiquetas <![CDATA[ y ]]> en el código HTML. La forma de generarla con la clase XMLWriter obedece al siguiente ejemplo:

$objetoXML->startCData();
$objetoXML->text("\n<html>");
$objetoXML->text("\n<head>");
$objetoXML->text("\n</head>");
$objetoXML->text("\n<body>");
$objetoXML->text("\n<h1>");
$objetoXML->text($obra["obra"]);
$objetoXML->text("</h1>");
$objetoXML->text("\n</body>");
$objetoXML->text("\n</html>\n");
$objetoXML->endCData();

Si el cóntenido de la sección CDATA es muy breve, podemos incluirlo en una sóla línea, con el método XMLWriter::writeCData(), así:

$objetoXML->writeCData("<h1>Esto es contenido HTML</h1>");

ESPACIOS DE NOMBRES

Puede que tu archivo XML vaya a ser utilizado por un artefacto que también reciba otros XML, de otros orígenes, que empleen los mismos nombres para las etiquetas. Esto podría dar lugar a confusiones, por ejemplo, respecto al origen de los datos. Para evitar ambigüedades se emplean los espacios de nombres. Básicamente son una manera de encapsular los datos de modo que evitemos esas ambigüedades. El artefacto encargado del procesamiento del XML reconocerá esos espacios de nombres para identificar el origen de los datos aunque, cómo es lógico, dichos espacios de nombres no forman parte del dato en sí, y no se procesan como tal. Es decir, una vez resuelta la ambigüedad (si es que esta llega a producirse), el espacio de nombres ya deja de tener sentido, y deja de tenerse en cuenta.

El espacio de nombres se incorpora a la etiqueta de los elementos como un prefijo terminado con el guarismo : (dos puntos). Además, la etiqueta del nodo afectado se finaliza con una referencia a la URI que ha generado los datos.

Para incluir una etiqueta de elemento con espacio de nombres se emplea el método XMLWriter::startElementNS() en lugar de usar el tradicional XMLWriter::startElement(). El método con espacio de nombres recibe tres argumentos:

  • El espacio de nombres.
  • El nombre del elemento.
  • La URI que ha generado los datos, o donde se define la estructura de los mismos.

Por ejemplo, si el script que veíamos en el post anterior estuviera en la URI http://www.ejemplos.com/escribir_xml.php, y quisiéramos definir un espacio de nombres para el nodo raíz, lo iniciaríamos así:

$objetoXML->startElementNS("mis_datos","obras","http://www.ejemplos.com/escribir_xml.php");

La finalización del nodo no cambia. Se sigue cerrando con el método XMLWriter::endElement().

     

Un comentario:

  1. Pingback: Crear XML con PHP (II) » Recursos para programadores

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *