Importar arquivo XML usando PHP e inserindo em BD MySQL.

MySQL, PHP, SQL, XML Comentar >> Marcelo Korjenioski

Crie um arquivo cha­mado 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 cha­mado 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 comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn



View Comments to “Importar arquivo XML usando PHP e inserindo em BD MySQL.”

  1. Jerusa Says:

    Ola, achei inte­res­sante este tópico, pois pre­ciso rea­li­zar a impor­ta­ção XML para o MySQL, porém quando fui rea­li­zar um teste com os arqui­vos pos­ta­dos, nao gerou nada… ou seja nao criou a base de dados… assim fui veri­fi­car e comen­tei a linha 59 do arquivo importa.php e ao menos criou a base de dados e a tabela, porem nao inse­riu nenhum regis­tro, vc pode­ria me auxi­liar ? pois pre­ciso jus­ta­mente fazer isso com o meu pro­jeto.. desde já agradeço.

  2. Marcelo Korjenioski Says:

    Modi­fi­quei o código colo­cando um if nos locais onde é feita a cone­xão com o banco.
    Lem­brando que não estou tra­tando se a tabela ou o banco já existe então se exe­cu­tar o código mais de uma vez irá dar erro.
    Com a variáel $ativar_conexao == false você terá o retorno ape­nas do texto da query gerada assim basta exe­cu­tar direto no banco de dados.

  3. sandro Says:

    e se eu esti­ver usando um link? um par­ceiro me pas­sou 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 pre­ciso impor­tar para o wordpress…

    como devo proceder?

  4. Marcelo Korjenioski Says:

    Olá San­dro como vai?
    Para abrir esta URL vc vai usar fopen. Depois que você fazer a cone­xão neste exem­plo todo o xml ou html vai ficar na variá­vel $dadosURL.

    <?php
    $url = “http://pt.wikipedia.org/wiki/Categoria:Especialidades_m%C3%A9dicas”;
    $cone­curl = @fopen(“$url”,“r”) or die (‘erro na cone­xãoinforme o admi­nis­tra­dor erro 15 ’);
    while(!feof($conecurl)) {
    $dado­sURL .= fgets($conecurl,4096);
    }
    fclose($conecurl);
    ?>

  5. Aldemir Says:

    O erro men­ci­o­nado por jerusa era ape­nas de sql, ao criar a tabela, fal­tou um paren­te­ses para fechar a sentença.

    Assim ó:
    $query = “CREATE TABLE pro­du­tos (codigo varchar(10),nome varchar(255), preco varchar(50),quantidade varchar(50))”;

Deixe um comentário

blog comments powered by Disqus
Designed by NattyWP Wordpress Themes.
Images by desEXign.