Oct 17
Importar arquivo XML usando PHP e inserindo em BD MySQL.
MySQL, PHP, SQL, XML Comentar >> Marcelo KorjenioskiCrie um arquivo chamado produtos.xml e insira o código abaixo.
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <catalogo> <produto id='p1'> <nome>Caderno</nome> <preco>2,00</preco> <quantidade>100</quantidade> </produto> <produto id='p2'> <nome>Caneta</nome> <preco>1,00</preco> <quantidade>200</quantidade> </produto> <produto id='p3'> <nome>Lapis</nome> <preco>0,50</preco> <quantidade>50</quantidade> </produto> <produto id='p4'> <nome>Livro Matematica</nome> <preco>11,00</preco> <quantidade>10</quantidade> </produto> <produto id='p5'> <nome>Apontador</nome> <preco>1,00</preco> <quantidade>20</quantidade> </produto> </catalogo>
Crie um arquivo chamado inporta.php e insira o código abaixo.
<?php
// Fazendo a conexão com o servidor MySQL
//Caso queira apenas criar o arquivo XML e gerar uma query sem inserir no banco
// mude valor de $ativar_conexao para false.
$ativar_conexao = true;
if ($ativar_conexao == true) {
$conexao = mysql_pconnect("localhost","root","") or die('falha ao conectar');
$query = 'CREATE DATABASE loja';
if(!mysql_query($query,$conexao)) {
echo 'falha ao criar banco<br />';
}
mysql_select_db("test",$conexao) or die($msg[1]);
$query = "CREATE TABLE produtos (
codigo varchar(10),
nome varchar(255),
preco varchar(50),
quantidade varchar(50)";
if(!mysql_query($query,$conexao)) {
echo 'falha ao criar tabela<br />';
}
}
// Fim comentario
$doc = new DomDocument;
// Carrega o arquivo XML com um arquivo DOMDocument
$doc->Load('produtos.xml');
$items = $doc->getElementsByTagName('produto');
$campos = array('nome','preco','quantidade');
$query = NULL;
$query .= "insert into produtos (codigo,nome,preco,quantidade) values ";
for ($i=0; $i < $items->length; $i++) {
$value = NULL;
$value .= " (";
$codigo = $items->item($i)->getAttribute('id');
$value .= "'$codigo',";
echo $items->item($i)->getAttribute('id') , '<br />';
// Busca por elementos definidos no array
$valor = array();
foreach ($campos as $campo) {
$valor[] = "'" . $items->item($i)->getElementsByTagName($campo)->item(0)->nodeValue . "'";
echo $items->item($i)->getElementsByTagName($campo)->item(0)->tagName , ': ';
echo $items->item($i)->getElementsByTagName($campo)->item(0)->nodeValue , '<br />';
}
$value .= implode(',', $valor);
$value .= ') ';
$values[] = $value;
echo '<hr>';
}
$query .= implode(',', $values);
echo $query;
// Comente caso apenas queira gerar o codigo xml
if ($ativar_conexao == true) {
if(!mysql_query($query,$conexao)) {
echo 'falha ao inserir dados<br />';
}
}
Caso tenha alguma duvida deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.

Ola, achei interessante este tópico, pois preciso realizar a importação XML para o MySQL, porém quando fui realizar um teste com os arquivos postados, nao gerou nada… ou seja nao criou a base de dados… assim fui verificar e comentei a linha 59 do arquivo importa.php e ao menos criou a base de dados e a tabela, porem nao inseriu nenhum registro, vc poderia me auxiliar ? pois preciso justamente fazer isso com o meu projeto.. desde já agradeço.
Modifiquei o código colocando um if nos locais onde é feita a conexão com o banco.
Lembrando que não estou tratando se a tabela ou o banco já existe então se executar o código mais de uma vez irá dar erro.
Com a variáel $ativar_conexao == false você terá o retorno apenas do texto da query gerada assim basta executar direto no banco de dados.
e se eu estiver usando um link? um parceiro me passou um link [ http://www.siteparceiro.com.br/xml/default_.php?login=**** SC&pass=temp&data=2009 – 08-14&data_final=2009 – 08-14 ]
que gera um arquivo xml… o qual preciso importar para o wordpress…
como devo proceder?
Olá Sandro como vai?
Para abrir esta URL vc vai usar fopen. Depois que você fazer a conexão neste exemplo todo o xml ou html vai ficar na variável $dadosURL.
<?php
$url = “http://pt.wikipedia.org/wiki/Categoria:Especialidades_m%C3%A9dicas”;
$conecurl = @fopen(“$url”,“r”) or die (‘erro na conexãoinforme o administrador erro 15 ’);
while(!feof($conecurl)) {
$dadosURL .= fgets($conecurl,4096);
}
fclose($conecurl);
?>
O erro mencionado por jerusa era apenas de sql, ao criar a tabela, faltou um parenteses para fechar a sentença.
Assim ó:
$query = “CREATE TABLE produtos (codigo varchar(10),nome varchar(255), preco varchar(50),quantidade varchar(50))”;