mysql to xml: Como transformar um resultado de uma query para XML ( de forma simples )

7 03 2007

Para que ? não sei!
Mas talvez já tenha precisado disso. Então segue.

Para o script, vamos utilizar um banco de dados de exemplo. O banco terá a seguinte estrutura:

-- criamos o banco de dados, caso ainda nao exista
CREATE DATABASE IF NOT EXISTS MYSQL2XML;

-- selecionamos o banco de dados
USE MYSQL2XML;

-- criamos a tabela se nao existir
CREATE TABLE IF NOT EXISTS exemplo (
    id_exemplo INT(11) NOT NULL AUTO_INCREMENT,
    descricao VARCHAR(32) NOT NULL,
    PRIMARY KEY(id_exemplo)
)ENGINE=INNODB;

-- adicionamos alguns registros
INSERT INTO exemplo VALUES ('', 'Primeiro exemplo');
INSERT INTO exemplo VALUES ('', 'Segundo exemplo');
INSERT INTO exemplo VALUES ('', 'Terceiro exemplo');

E o script PHP para transformar o resultado da query sql para formato XML é o qual segue. Está todo comentado, para facilitar o entendimento.


<?php
    
// arquivo mysql2xml.php

    // definimos informacoes para conexao ao banco de dados:
    $banco   ‘mysql2xml’;             // nome do banco
    
$host    ‘localhost’;             // host
    
$usuario ‘root’;                  // usuario
    
$senha   ”       ;               // senha
    
$sql     ‘select * from exemplo’// query a ser executada
    
    
    // criamos um objeto do tipo SimpleXMLElement, o qual ira
    // gerar o XML para nos
    
$sxe = new SimpleXMLElement(‘<resultset />’);
    
    
// connectamos ao host e executamos a query sql
    
mysql_connect($host$usuario$senha);
    
mysql_select_db($banco);
    
$rs mysql_query($sql);
    
    
// em um loop, obtemos todas as linhas do resultado
    // da query. Note que o resultado e’ obtido como um array
    // associativo apenas.
    
while ( $row mysql_fetch_array($rsMYSQL_ASSOC) ) {
        
// abaixo do primeiro node do XML que estamos criando, vamos
        // adicionando mais um no, que ira conter o resultado da query.
        // na primeira iteracao do loop, o xml estaria parecendo com
        //
        // <resultset>
        //     <line></line>
        // </resultset>
        
$line $sxe->addChild(‘line’);

        // e, em mais um loop, passamos por todos as colunas
        // do resultado da query e adicionamos cada uma delas
        // ao node criado anteriomente. Neste loop, apos a primeira
        // e a segunda iteraca, o xml estaria parecendo com: 
        // (para o sql citado anteriormente)
        //
        // <resultset>
        //     <line>
        //         <id_exemplo>1</id_exemplo>
        //         <descricao>Primeiro exemplo</descricao> 
        //     </line>
        // </resultset>
        
foreach ( $row as $fieldName => $value )
            
$line->addChild($fieldName$value);
    }
    
    
// finalmente, transformamos o objeto SimpleXMLElement criado no 
    // inicio do scrip em uma string formatada em XML
    
echo $sxe->asXML();
?> 

Executando em linha de comando, temos (o resultado é exibido em uma linha apenas, formatei para propósito de visualização) :

$ php mysql2xml.php

<?xml version=“1.0”?>
<resultset>
    <line>
        <id_exemplo>1</id_exemplo>
        <descricao>Primeiro exemplo</descricao>
    </line>
    <line>
        <id_exemplo>2</id_exemplo>
        <descricao>Segundo exemplo</descricao>
    </line>
    <line>
        <id_exemplo>3</id_exemplo>
        <descricao>Terceiro exemplo</descricao>
    </line>
</resultset>

Arquivos:
mysql2xml.php
exemplo.sql

É isso.

Anúncios

Ações

Information

9 responses

2 07 2007
Robertson Matos

Muito boa e bem explicada a matéria… será de grande ajuda pra mim futuramente!

Valeu!

p.s: Será que você saberia explicar como funciona o inverso dessa matéria, ou seja, ele percorrer o xml e inserir as linhas no banco de dados (mysql) através de um while ou for.

9 07 2007
xml to mysql: Transformando um arquivo XML em queries SQL (e blablabla) « PHP-BR

[…] um arquivo XML em queries SQL (e blablabla) xml to mysql: Como fazer o reverso indicado aqui: mysql to xml: Como transformar um resultado de uma query para XML ( de forma simples ) ( de forma simples […]

31 07 2007
walison

“Para que ? não sei!
Mas talvez já tenha precisado disso. Então segue.”

Como assim não sabe?

Bom, porque da minha pergunta?

Estou tentando criar um arquivo xml. Até já consegui utilizando PHP e MySQL mas eu tive que fazer com que o host reconhecesse o arquivo xml como php.

Alem dessa forma que você descreveu que me parece que vc está utilizando PHP5 existe alguma forma semelhante de se fazer utilizando PHP4.*.* (meu host é em PHP4) ?

Um outro problema que estou tendo é que no internet explorer uma das linhas está se repetindo e não consigo entender o porque.

Caso queira visuzliza-la:

http://www.batepapobrasil.com/salas_ranking_semanal.xml

Desde já agradeço a atenção!

31 07 2007
E Silva

Esse problema de host reconhecer arquivo xml como pph é engraçado, acompanhei uma discussão algum tempo atras sobre isso… Se deve ao fato de o arquivo iniciar com “<?xml”, onde o <? era identificado como sendo inicio de código php…
A discussão era exatamente para retirar do php esse suporte, a short-open-tags.

E sim, estou utilizando php5. Até tem forma “semelhante” de fazer, utilizando DOM XML – http://www.php.net/manual/pt_BR/ref.domxml.php . É bem mais trabalhoso, acho mais simples mudar de host, para algum que suporte php5.

E baixei esse arquivo XML que você deixou o link, não encontrei a dita repetição. Será problema do IE ?

17 01 2008
Leandro Hamid

Parabéns pelo artigo.

Eu testei o script do seu tutoial e a linha relacionada ao loop passando como argumento um array asscociativo não rodou, vide:

while ( $row = mysql_fetch_array($rs, MYSQL_ASSOC) )

eu escevi um script alternativo para geração do xml e funcionou, como posso enviar este script para que ele seja divulgado no blog como alternativa ao atutorial que você escreveu?Aguargo retorno.

Leandro Hamid

30 01 2008
E Silva

opa, manda em anmsx@heap.com.br

15 06 2008
Angel Dillon

phosphinate unperformance buckthorn possessioned engarment recital periodicalize vinously
Legacy School of the Arts & Classics: in Marysville, WA
http://www.cbvi.org/

20 06 2008
Lewis Garcia

phosphinate unperformance buckthorn possessioned engarment recital periodicalize vinously
Koompartoo Retreat
http://www.rockvalleywomenshealth.com/

9 08 2010
Juliano

Para que? Eu sei… hehe tenho uma galeria em flash que pega os dados do XML e isso ai vai quebra um baita galhão hein…

Vlw

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




%d blogueiros gostam disto: