Phaneronsoft desenvolvimento Web
Ph: 04102010
 

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


Jerusa

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.

Mar­celo Korjenioski

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.

san­dro

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?

http://www.phaneronsoft.com Mar­celo Korjenioski

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

Alde­mir

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))â€;

Luci­a­ne­be­din

oi… no meu caso estou pegando o arquivo xml do hd da maquina. pelo file Field. meu erro está na hora de pas­sar o nome do arquivo. Pois antes de fazer isso $doc = new Dom­Do­cu­ment;
31.
// Car­rega o arquivo XML com um arquivo DOM­Do­cu­ment
32.
$doc->Load(‘produtos.xml’); estou pegando o cami­nho do arquivo:$xml = $_POST[’arquivoXML’];
Mas como faço para pegar só o nome do arquivo que o usuá­rio esco­lhe no form uti­li­zando o file Field??? se puder me aju­dar agra­deço, pois é tra­ba­lho de con­clu­são do curso e não con­se­gui fazer isso.

lean­drohubo

Acho que vc tem que usar assim: $_FILES[’arquivo_XML’][’name’] ao invés de $_POST[’arquivo_XML’]:

Alex Lavalle

ola boa tarde.
gos­tei muito do seu artigo. e comc erteza será muito util para os meus estu­dos.
bom a duvida e o seguinte.: tenho alguns arqui­vos xml que sao divi­di­dos em cate­go­rias de um site. e pra cada cate­go­ria quero dei­xar den­tro do banco de dados e claro divi­di­dos por cate­go­rias tb. e a outra coisa, eu pre­ciso pra­ti­ca­mente com uma certa urgen­cia, e que o usu­a­rio irá fazer um upload das ima­gens e será gra­vado den­tro do banco de dados dife­ren­ci­ando as cate­go­rias, eu acre­dito que tem que ter uma rotina que o usu­a­rio informe em qual banco de dados que quer gra­var as ima­gens. e o res­tante e que ele gere auto­ma­ti­ca­mente os arqui­vos xml. isso seria pos­si­vel de se fazer?

fico no aghu­ardo, meu email é.: alex.lavalle@gmail.com

abra­ços

alex

Andre Silva

Boas pes­soal…
Tenho um pro­blema ao qual não sei dar solução…por exemplo…

…
…

Gos­ta­ria de pegar no valor do nó pai(aluno) para poder fazer insert no mysql usando insert into aluno values(nome,idade).
Os exem­plos que encon­trei só fun­ci­o­nam uti­li­zando sem­pre o mesmo xml, mas o meu objec­tivo é selec­ci­o­nar um xml qual­quer e detec­tar o nó pai ante­rior aos valo­res a inse­rir no mysql.
Se me pode­rem aju­dar agra­de­cia imenso.

Dltorres2006

Olá amigo. Show de bola. Fun­ci­o­nou per­fei­ta­mente. Porém o arquivo é gra­vado no BD mas não uti­liza a acen­tu­a­ção cor­reta. Uti­lizo no XML –> é a acen­tu­a­ção sai codi­fi­cada. abra­ços — Luiz — dltor­res 2006@gmail.com

Dltorres2006

em tempo: O arquivo xml ini­cia com:
xml version=“1.0″ encoding=“iso-8859 – 1″

Rodri­go­bai­xa­vip

ok, por­que os dados do xml não foi cri­ado no banco de dados auto­ma­ti­ca­mente?
 

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


You are viewing a mobilized version of this site...
View original page here

Mobilized by Mowser Mowser