Muitas vezes temos a necessidade de escrever XML. E uma forma simples de escrever XML com PHP, é usando a classe SimpleXmlElement.
Mas ela não tem um método que adicionar o CData no XML.
O CData seriam dados de caracteres. É uma sintaxe onde você informa que o conteúdo daquela tag terá elementos especiais, como acentuação, sinal de maior (>) ou menor (<), etc.
O que iremos fazer, é estender a classe SimpleXmlElement e adicionar um novo método chamado addCData, o qual ele irá adicionar um no no XML, com Cdata.
<?php /** * Cria a classe SimpleXmlElementComplement * que estende a classe SimpleXMLElement */ class SimpleXmlElementComplement extends SimpleXMLElement { /** * Cria um método com nome addCData * Recebe dois paramêtros : $name e value * @param string $name => Será o nome do nó * @return string $value => O valor atribuido */ public function addCData($name, $value = null) { /** * Criamos aqui um nó, usando * o método addChild do SimpleXMLElement */ $child = $this->addChild($name); /** * Aqui Importamos o Nó do SimpleXMLElement * para um DOMElement */ $node = dom_import_simplexml($child); /** * ownerDocument => Informamos que DomElement está associado a esse nó que criamos * createCDATASection => adiciona o conteúdo CData */ $cdata = $node->ownerDocument->createCDATASection($value); //Adicionar $cdata ao novo nó $node->appendChild($cdata); } }Agora, vamos usar essa classe
<?php //Informamos que tipo de conteudo será um XML header('Content-type:text/xml'); //Inclue a classe que criamos require_once "SimpleXmlElementComplement.php"; //Instancia a Classe SimpleXmlElementComplement $xml = new SimpleXmlElementComplement('<?xml version="1.0" encoding="UTF-8"?><products/>'); //Adiciono um nó (produto) $product = $xml->addChild('product'); //Dentro do nó produto, adicionamos o Nome do Produto $product->addChild('name', 'Novo Produto'); //Aqui a descrição com método que Criamos, e adicionando os caracteres $product->addCData('description', "Aqui contém os caracters & e <>"); //imprimos o XML echo $xml->asXML();E retorno será:
<?xml version="1.0" encoding="UTF-8"?> <products> <product> <name>Novo Produto</name> <description><![CDATA[Esse tem tag & and <>]]></description> </product> </products>Espero que tenha ajudado e até a próxima.
Abraços a todos.
Funcional e muito bem documentada. Obrigado.
Obrigado pela dica!