David CHC

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.

A classe SimpleXMLElement é uma classe do PHP que permite a manipulação de dados XML. Ela faz parte da extensão SimpleXML, que é uma das extensões nativas do PHP para trabalhar com XML.

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 SimpleXmlElementCData
 * que estende a classe SimpleXMLElement
 */
class SimpleXmlElementCData extends \SimpleXMLElement {

    /**
     * Cria um método com nome addCData
     * Recebe dois parâmetros : $name e value
     * @param  string $name => Será o nome do nó
     * @return string $value => O valor atribuído
     */
    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 "SimpleXmlElementCData.php";

//Instancia a Classe SimpleXmlElementCData
$xml = new SimpleXmlElementCData('<?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 <>");

//imprimimos 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.

Compartilhar a publicação

Trabalha com desenvolvimento web há 15 anos, atuou como programador líder do MX Cursos por mais de 8 anos.  Possui vasto conhecimento em PHP, Javascript, HTML5, CSS3,  GIT, MySQL

Deixe uma resposta

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

Sobre

Trabalho  com desenvolvimento web há 17 anos, atuou como programador líder do MX Cursos por mais de 8 anos . Possui vasto conhecimento em PHP, Javascript, HTML5, CSS3,  GIT, MySQL, WordPress, WooCommerce

© 2023 – Todos direitos reservados