Jump to content
gereiz

[Resolvido] Erro ao Importar XML

Recommended Posts

Boa noite!

 

Estou tendo problemas em importar um arquivo xml para o mysql pelo PHP.

 

O xml é este abaixo:

<PRODUTO2>
    <DADOS>
        <CHAVE>
            <COD_PRODUTO>131</COD_PRODUTO>
        </CHAVE>
        <CADASTRO>
            <NOME>TETRAMED 500MG C/100 CAPS(25X04)-MEDQUIMICA</NOME>
            <EAN13>7896862970031</EAN13>
            <GEN>TETRACICLINA</GEN>
            <FORN>113</FORN>
            <ATIVO>S</ATIVO>
            <TIPO>99</TIPO>
            <PRECO>16.95</PRECO>
            <REFERENCIA>TETREX</REFERENCIA>
            <CAIXA>50</CAIXA>
            <DT>17-10-2018 11:55:19</DT>
            <PRZ_MEDIO_MAX>-1</PRZ_MEDIO_MAX>
        </CADASTRO>
    </DADOS>

E meu código php é esse:

/* PEGA O ARQUIVO XML */
        $caminhoDoXML = "C:/xampp/htdocs/cota/xml/Distriam/ServCli/Receber/tudo/PRODUTO2.XML";
        $xml = simplexml_load_file($caminhoDoXML) or die("Erro, não consegui achar o XML");
 
$x = 0;

foreach ($xml->children() as $DADOS) {                
                
                
foreach ($DADOS as $row) {
    $COD_PRODUTO = $row -> CHAVE->COD_PRODUTO;
    $NOME = $row -> NOME;
    $EAN13 = $row -> EAN13;
    $PRECO = $row -> PRECO;
    
        if(mysqli_affected_rows($conn) != -1){
       $x++;
    }
}

$sql = "INSERT INTO produtos01 (COD_PRODUTO, NOME, EAN13, PRECO) 
                    VALUES 
                ('$COD_PRODUTO', '$NOME', '$EAN13', '$PRECO')";


$result = mysqli_query($conn,$sql);
if (!$result) {
    echo 'Erro do Mysql';
} else {
        echo 'Importado com sucesso<BR>';
    
}
}

O problema é que o php insere no banco de dados os valores dentro da tag <CADASTRO> (NOME, EAN13 e PRECO) corretamente, mas os valores da tag <CHAVE>  (COD_PRODUTO) não, todas as linhas aparecem com o valor 0. Por favor, ajudem, pois o COD_PRODUTO Será justamente minha chave estrangeira para minhas views. Quando tento importar o arquivo CSV via Workbench, consigo normalmente, porem o xml com PHP não. 

Edited by Gabriel Heming
adicionar formatação de código

Share this post


Link to post
Share on other sites

Você está iterando sobre o XML de forma errada. Veja o seguinte código: https://3v4l.org/nTq7s

 

Quando você executa o seguinte código:

foreach ($DADOS as $row) {

Ele itera duas vezes, a primeira utilizando os dados do node CHAVE a segunda utilizando os valores de CADASTRO. Percebeu que para recuperar o valor de NOME, EAN13, etc..., você não precisa utilizar o node CADASTRO, mas está usando o node CHAVE que fica no mesmo nível?

 

Você pode resolver o seu problema removendo o foreach acima e utilizando diretamente os nodes que desejas recuperar:

foreach ($xml->children() as $DADOS) {
    echo $DADOS->CHAVE->COD_PRODUTO;
    echo $DADOS->CADASTRO->NOME;
    echo $DADOS->CADASTRO->EAN13;
    echo $DADOS->CADASTRO->PRECO;
}

Saída:

Citar

131

TETRAMED 500MG C/100 CAPS(25X04)-MEDQUIMICA

7896862970031

16.95

 

Veja o código em funcionamento: https://3v4l.org/CS2Sb

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By drx
      Olá pessoal!
       
      Pergunta:  Dá para desenvolver qualquer tipo de sistema web com WordPress?
      Por exemplo: Quero desenvolver um sistema multinível. É tranquilo?
      Aguardo.
    • By thgsousa3122
      <?php $url = 'www.site.com'; $dadosSite = file_get_contents($url); echo $dadosSite; ?> <script type="text/javascript"> window.onload = function(){ var x = document.getElementsByClassName("fraction")[0].innerHTML= "100"; } </script> Glr tenho esse codigo, eu queria alterar o conteudo que tem como classe "fraction", porem ele nao da resposta, alguem tem alguma sujestão?
    • By brunoogm
      Pessoal, vou iniciar um desenvolvimento mobile usando Xamarin
      e gostaria de saber se alguém conhece alguma maneira
      ou tenha algum doc. de como utilizar PHP e MySql (e se necessário Json)
      para realizar um CRUD e a partir daí eu poder me entender com a plataforma...
       
      Desde já obrigado.
       
       
    • By drx
      Olá pessoal!
       
      Me tirem uma dúvida. Já desenvolvo com vb6 já faz algum tempo. E também venho incrementando o conhecimento para desenvolver para web com php e por aí vai.
      A pergunta que não quer calar: Com o VS.NET eu desenvolvo para desktop e web ?
      Por que a pergunta? Porque quero investir tempo em um IDE que me atenda as duas coisas.
      Aguardo
    • By eduardaarosaa
      Eu estou fazendo um sistema com multipolos uploads de aquivos.
       
      Aqui ele está movendo o arquivo para pasta upload: 
       $upload = $request->image[$i]->storeAs('upload', $nameFile);
      Ao dar var_dump nesta variável ela retorna: 
       
       string(38) "upload/172118201908225d5ef93e4d803.png" string(38) "upload/172118201908225d5ef93e4f9b2.png" string(38) "upload/172118201908225d5ef93e50899.png" string(38) "upload/172118201908225d5ef93e51b72.png"
       
      São os 4 arquivos que deram upload, porém está em string e eu queria usar em array para separar em variáveis e adicionar no banco. 
       
      Use o explode assim: 
      $array = explode(",", $upload);
      Então ele retornou vários arrays com o mesmo indice: 
       
      array(1) { [0]=> string(38) "upload/172322201908225d5ef9ba3cf15.png" } array(1) { [0]=> string(38) "upload/172322201908225d5ef9ba3edab.png" } array(1) { [0]=> string(38) "upload/172322201908225d5ef9ba3fbcc.png" } array(1) { [0]=> string(38) "upload/172322201908225d5ef9ba4163a.png" }
       
      Como faço para poder separar esses arrays? Ou mudar os índices? Se alguém souber .. 
      Obrigada!!!
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.