Entradas con la etiqueta ‘generar’

PHP – Escribir un XML con CDATA Usando SimpleXML

Publicado por Iván Gajate el 26 de abril de 2011 en Desarrollo Web | 14 comentarios »

Si usamos la fantástica librería de PHP SimpleXML para leer y construir xml, nos habremos dado cuenta que no tiene soporte para meter datos en etiquetas CDATA, lo cual es un engorro.

Tras mucho buscar, he encontrado este truco que soluciona el problema 🙂

Consiste en extender la clase SimpleXml para ampliarla con DOM, que sí tiene soporte para CDATA, y devuelve un objeto SimpleXML 🙂

Así, si nos creamos una clase “SimpleXMLExtended.php

<?php
	class SimpleXMLExtended extends SimpleXMLElement {
	  public function addCDATA($cData) {
	    $node = dom_import_simplexml($this);
	    $no = $node->ownerDocument;
	    $node->appendChild($no->createCDATASection($cData));
	  }
	}
?>

Podemos crear un XML así:

<?php
	Header('Content-type: text/xml;  charset=utf-8'); 

	require_once('SimpleXMLExtended.php');

	$miXML = new SimpleXMLExtended('<?xml version="1.0" encoding="UTF-8"?><usuario></usuario>');
	$nombre = $miXML->addChild('nombre');
	$nombre->addCData('Iván Gajate');
	echo $miXML->asXML();
?>

Y devolverá esto:

<?xml version="1.0" encoding="UTF-8"?>
<usuario>
	<nombre><![CDATA[Iván Gajate]]></nombre>
</usuario>