Escrevendo CDATA usando SimpleXmlElement

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]
<?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);

}

}

[/php]

Agora, vamos usar essa classe

[php]
<?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();

[/php]

E retorno será:

[xml]
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<name>Novo Produto</name>
<description><![CDATA[Esse tem tag & and <>]]></description>
</product>
</products>
[/xml]

Espero que tenha ajudado e até a próxima.

Abraços a todos.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *