xml to mysql: Transformando um arquivo XML em queries SQL (e blablabla)

7 07 2007

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 )

Sugerido aqui, por Robertson Matos

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 XML2MYSQL;

-- selecionamos o banco de dados
USE XML2MYSQL;

-- 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;

O XML de exemplo é este:
demo.xml


<?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>

E o script é este:


<?php
    
// arquivo xml2mysql.php

    // definimos informacoes para conexao ao banco de dados:
    $banco   ‘xml2mysql’;             // nome do banco
    
$host    ‘localhost’;             // host
    
$usuario ‘root’;                  // usuario
    
$senha   ;               // senha
    
    // connectamos ao host e selecionamos o banco
    
mysql_connect($host$usuario$senha);
    
mysql_select_db($banco);

    // esta variavel sera a query utilizada para insercao dos
    // dados no banco, tendo o %d substituido pelo id_exemplo
    // e o %s substituido pela descricao
    
$query ‘insert into exemplo (id_exemplo, descricao) values (%d, “%s”)’;
    
    
// carregamos o conteudo do arquivo XML
    
$xml file_get_contents(‘demo.xml’);
    
    
// transformamos o XML em um objeto, para que possamos trabalhar
    // de forma mais simples com ele
    
$sxml = new SimpleXMLElement($xml);
    
    
// aqui iteramos por todo o XML:
    // a cada iteracao, $line ira conter um objeto to tipo
    // SimpleXMLElement, sendo o equivalente a:
    //
    //  <line>
    //      <id_exemplo>1</id_exemplo>
    //      <descricao>Primeiro exemplo</descricao>
    //  </line>
    //
    
foreach ($sxml as $linhaAtual) {
        
// aqui vamos obter cada item do xml que seria referente
        // ao campo da tabela.
        // Necessario cast pelo fato de que a propriedade do objeto
        // tambem é um objeto do tipo SimpleXMLElement
        
$id        = (int) $linhaAtual->id_exemplo;
        
$descricao = (string) $linhaAtual->descricao;
        
        
// aqui preparamos a query para ser utilizada
        
$tmpQuery sprintf($query$id$descricao);
        
        
// exibimos a query que será executada
        
echo sprintf(‘Executando query: %s%s’$tmpQuery“\n”);

        // e aqui executamos a query
        
mysql_query($tmpQuery);
    }

Sem controle de erros, prevenção de sql injection, blablabla, apenas para ilustrar, como de costume.
Executando temos:

$ php xml2mysql.php
Executando query: insert into exemplo (id_exemplo, descricao) values (1, “Primeiro exemplo”)
Executando query: insert into exemplo (id_exemplo, descricao) values (2, “Segundo exemplo”)
Executando query: insert into exemplo (id_exemplo, descricao) values (3, “Terceiro exemplo”)

E conferindo no banco:

mysql> select * from exemplo;
+————+——————+
| id_exemplo | descricao |
+————+——————+
| 1 | Primeiro exemplo |
| 2 | Segundo exemplo |
| 3 | Terceiro exemplo |
+————+——————+
3 rows in set (0.00 sec)

É isso ai, valeu pela sugestão Robertson

Arquivos:
xml2mysql.php
xml2mysql.sql
demo.xml

Anúncios

Ações

Information

10 responses

18 06 2010
Giovani Rodrigues

Gostaria de saber o seguinte.
Quero colocar uma pesquisa para um usuário no meu site.
Tenho um banco de dados, com os registros de cidade, estado e rua.

Quando o usuário começa a digitar, vão aparecendo as sugestões de endereço.

A pergunta é: Fica mais rápido fazer isso com um arquivão .xml ou com uma chamada direta no mysql?

Se possível me dá uma luz, eheheheh..

Agradeço.
Parabéns pelo site.. :D

5 11 2012
supercuca

nao estou conseguindo baixar os aquivos! tem como disponibiliza-los novamente?

obrigado!

4 08 2010
Mário Leal

e onde guardo o ficheiro xml???………….já agora tambem no final nao leva …?>

5 08 2011
Rodrigo Bartz

XML para MySQL ou
XML para PHP depois MySQL?

17 03 2012
thiagoiluminacao

bom

6 08 2012
net

e como eu gero isso

1
Primeiro exemplo

2
Segundo exemplo

1
Primeiro exemplo

6 08 2012
net

/*

1
Primeiro exemplo

2
Segundo exemplo

1
Primeiro exemplo

*/

4 12 2012
diego.pk7

Woow!!!
Funcionou perfeito, só tive que muda umas coisas e pesquisar %d e %s que num sabia oque era

E consegui joga todos os 114 do xml no meu banco de dados ^^

Digitei basicamente isso:

capa;
$url = (string) $linhaAtual->url;
$titulo = (string) $linhaAtual->nome_1;
$autor = (string) $linhaAtual->autor;
$editora = (string) $linhaAtual->editora;
$publisher = (string) $linhaAtual->publisher;

$tmpQuery = sprintf($query, $cover, $url, $titulo, $autor, $editora, $publisher);

mysql_query($tmpQuery);
}
?>

e fui no wamp, abri o arquivo, apareceu nada, tudu em branco;
Fui vê no banco de dados, tava tudo lá! todos os 114 registros \o/

4 12 2012
diego.pk7

esquece oque digitei acima –‘
Digo, a parte do código.
todas as tags desapareceram ô.o

4 12 2012
diego.pk7

E ****, melhora esse sistema de comentários viu ¬¬

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: