Classe PHP para gerar XML
Ano passado fiz uma classe simples para gerar arquivos XML a partir de um Array Associativo de um modo mais prático. Fiquei surpreso semana passada com o número de downloads e o feedback positivo que tive ao publica-la no phpclasses.org, por isso vou postar aqui também.
Exemplo de Uso
header("Content-type:application/xml; charset=utf-8");
$tmp = $this->Search("SELECT id, nome FROM usuarios");
$objXml = new Xml();
$objXml->addContent($tmp,'usuarios');
echo $objXml->showXML();
Classe XML.Class.php
/** * Classe responsável por formatar conteúdos em arquivos XMl * * @author Marcos Timm Rossow* @version 0.1 * @copyright Interwise * @access Public * @package ADM */ class Xml { /** * Variável com o nome do sistema * O nome do sistema é o root do documento xml * Por padrão define o sistema definido no arquivo de configuração * @access Private * @name $_root */ private $_root = "root"; /** * Variável com o tipo de codificação * @access Private * @name $_root */ private $_codificacao = 'UTF-8'; /** * Versão do documento de saída * @access Private * @name $_versao_xml */ private $_versao_xml = '1.0'; /** * Objeto de construção do arquivo XML * @access Private * @name $_obj_xml */ private $_obj_xml; /** * Método construtor. * Inicia o objeto e cria o root com o nome do sistema especificado no arquivo de configuração * @access Public * @param String $_root possibilita definir outro nome ao root do documento diferente do informado no arquivo de configuração do sistema * @param String $_codificacao possibilita definir outro tipo de codificação. O padrão é UTF-8 * @param String $_versao_xml possibilita alterar a versão de saída do arquivo XML. Por padrão, versão 1.0 * @return bool */ public function __construct($_root = FALSE, $_codificacao = FALSE, $_versao_xml = FALSE) { // caso tenha sido passado um nome para o sistema, define o mesmo if(isset($_root) AND "" != $_root) $this->_root = $_root; // caso tenha sido passado a codificação do sistema, define o mesmo if(isset($_codificacao) AND "" != $_codificacao) $this->_codificacao = $_codificacao; // caso tenha sido passado versão de saída do arquivo xml, define o mesmo if(isset($_versao_xml) AND "" != $_versao_xml) $this->_versao_xml = $_versao_xml; // inicia o objeto XmlWriter $this->_obj_xml = new XmlWriter(); // inicia a memória $this->_obj_xml->openMemory(); // inicia o documento passando como parâmetro a versão do documento xml e o tipo de codificação que será usada $this->_obj_xml->startDocument($this->_versao_xml, $this->_codificacao); // cria a raiz do documento com o nome do sistema $this->_obj_xml->startElement($this->_root); // habilita a identação do documento $this->_obj_xml->setIndent(TRUE); // define 3 espaços para serem utilizados como identação afim de ficar mais claro no debug $this->_obj_xml->setIndentString(" "); return true; } /** * Método para adicionar conteúdo ao XML * Inicia o objeto e cria o root com o nome do sistema especificado no arquivo de configuração * @access Public * @param String $_array_dados Array de forma associativa com dados a serem inseridos no objeto XML * @return bool */ public function addContent($_arr_dados, $_str_indice = FALSE) { // verifica se foi passado um array válido if(is_array($_arr_dados) AND 0 < count($_arr_dados)) { // percorre os elementos do array foreach($_arr_dados as $chave => $valor) { // verifica se existem filhos para este array if(is_array($valor)) { // abre o elemento $this->_obj_xml->startElement($_str_indice); // define o primeiro valor como atributo //$this->_obj_xml->writeAttribute("id", $valor[key($valor)]); // retira a chave //array_shift($valor); // recursividade para inserir um elemento interno $this->addContent($valor); // finaliza o elemento $this->_obj_xml->endElement(); // continua percorrendo o array continue; } // insere elementos que não contenham mais filhos @$this->_obj_xml->writeElement($chave,$valor); } return true; } else { // debug // array inválido } } /** * Método para retornar o arquivo XML gerado * @access Public * @return string */ public function showXML() { // finaliza o objeto $this->_obj_xml->setIndent(true); $this->_obj_xml->endElement(); // retorna o XML gerado return $this->_obj_xml->outputMemory(true); } }
Está bem comentada. Acho que é bem fácil de entender.
Quem preferir baixar diretamente do PHPClasses: Simple XML Generator
Em breve vou postar outras Classes PHP que ajudam a tornar a vida mais simples.
Nenhum comentario ainda