Jump to content
Fórum Script Brasil
  • 0

Inserir Dados Do Xml No Banco De Dados Mysql


Robertson Matos
 Share

Question

Galera to com um problema aqui meio complicado... espero que consigam me ajudar...

estou tentando jogar os dados de um arquivo xml num banco de dados...

Usei o código a seguir... só que ele contém um bug...

Quando o while é finalizado ele só mostra a última linha afetada com o while... Ele nem parece um while de verdade, hauhaha!

o código é o seguinte:

// arquivo.php

<?

$array = array();

$chave = "";

$info = "";

//FUNÇÃO DA TAG INICIAL DO ARQUIVO XML (O QUE SERA MOSTRADO ANTES DOS DADOS DO XML)

function FuncInicial($parser, $elemento )

{

global $array;

}

// FUNÇÃO DA TAG FINAL DO ARQUIVO XML (O QUE SERA MOSTRADO DEPOIS DOS DADOS VINDOS DO XML)

function FuncFinal($parser, $elemento)

{

global $array, $info;

$chave = $elemento;

$array[$chave] = $info;

$info = "";

}

//FUNÇÃO QUE MOSTRA OS DADOS DO XML

function FuncDados($parser, $dados )

{

global $info;

$info .= $dados;

}

//CRIA O ANALISADOR DO XML

$parser = xml_parser_create();

//PEGA O CABEÇALHO E RODAPÉ DO DOCUMENTO INFORMADOS NAS FUNÇÕES ACIMA

xml_set_element_handler($parser, "FuncInicial", "FuncFinal";

//PEGAR OS DADOS DO XML

xml_set_character_data_handler($parser, "FuncDados";

//ABRE O XML

$file = "tabelas.xml";

$ponteiro = fopen($file, "r";

// O PROBLEMA TÁ AQUI....

// ENQUANTO TIVER LENDO O ARQUIVO INCLUE O INSERT

// NO LUGAR DO filesize($file) UTILIZANDO O NUMERO 1540 FICA QUASE PERFEITO

while ($dados = fread($ponteiro, filesize($file)))

{

//INICIA A ANALISE DOS DADOS DO XML

xml_parse($parser, $dados);

//CRIA O LOOP PARA GERAR OS INSERT DO XML

$sql= "INSERT INTO `MATERIAL` VALUES ('";

$i=count($array);

$h=0;

/* O FOREACH varre uma dada matriz dada por expressao_array. Em cada 'loop', o valor do elemento corrente é atribuído a $valor e o ponteiro interno da matriz é avançado em uma posição */

foreach( $array as $junta => $valor )

{

$h++;

$sql.= trim($valor);

if($i>$h) $sql.= "', '";

if($i<=$h) $sql.= "')";

}

echo $sql;

}

//LIBERA O ANALISADOR XML

xml_parser_free($parser);

?>

// O tabelas.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<TABELAS>

<REGISTRO>

<MATERIAL tipo ="varchar" tamanho="21">01</MATERIAL>

<CODIGOBARRAS tipo ="varchar" tamanho="41">01001</CODIGOBARRAS>

<DESCRICAO tipo ="varchar" tamanho="256">AREIA GROSSA</DESCRICAO>

</REGISTRO>

<REGISTRO>

<MATERIAL tipo ="varchar" tamanho="21">02</MATERIAL>

<CODIGOBARRAS tipo ="varchar" tamanho="41">02</CODIGOBARRAS>

<DESCRICAO tipo ="varchar" tamanho="256">BRITA</DESCRICAO>

</REGISTRO>

</TABELAS>

Ajudem-me ... no google não tem nada explicando esse procedimento... Quem colocabora ficarei extremamente agradecido pelo resto da vida! hehe

Serve sugestões (com exemplos em DOM ou qualquer outro método que não seja esse)

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0
Seu while é controlado por "fread($ponteiro, filesize($file))", que lê todo o arquivo de uma só vez, portanto, o while só tem uma iteração.

Que tal executar "echo $array;" para verificar se seu array está criado corretamente?

testei o array... e o array cria de acordo com o while... ou seja só 1 registro... o problema ta no while...

mas to perto de resolver...

valeu pela dica amigo...

Seu while é controlado por "fread($ponteiro, filesize($file))", que lê todo o arquivo de uma só vez, portanto, o while só tem uma iteração.

Que tal executar "echo $array;" para verificar se seu array está criado corretamente?

testei o array... e o array cria de acordo com o while... ou seja só 1 registro... o problema ta no while...

mas to perto de resolver...

valeu pela dica amigo...

Já consegui elaborar o código... vou só aprimorar e coloco o resultado aqui pra quem interessar possa.. huhuahua

valeu a todos pela ajuda!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.7k
×
×
  • Create New...