// 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)
Pergunta
Robertson Matos
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 para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.