quarta-feira, 4 de janeiro de 2017

Abrir XML em PHP

Depois de procurar e não encontrar um código completo, juntei as partes que garimpei na Internet e estou postando para os que tiverem a mesma  dificuldade possam aproveirar.

 PAGINA: selecionar-xml.php

<form method="post" action="importar.php" enctype="multipart/form-data">
  <label>Arquivo</label>
  <!-- MAX_FILE_SIZE deve preceder o campo input -->
  <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
  <!-- O Nome do elemento input determina o nome da array $_FILES -->
  <input type="file" name="arquivo" />
  <input type="submit" value="Enviar" />
</form>


-----------------------------------------------------------------------------------------------------------------




 PAGINA: importar.php
<?php

  $nfe = $_FILES['arquivo']; // Recebe o arquivo do formulário html
  $tam_max = 1024*1024*2; // Tamanho em Bytes (2mb)
  $extensao = strtolower(end(explode('.', $nfe['name'])));

/* verifica se o tamanho do arquivo não excede 2 mb
   o error 2 é quando excede o tamanho permitido pelo php */
 if (($nfe['size']>$tam_max) || ($nfe['error']==2)){
  echo "O arquivo é maior que o permitido";
  exit;
 }

// Faz a verificação da extensão do arquivo
 if ($extensao !="xml" ) {
 echo "Por favor, envie arquivos com a extenção .xml";
  exit;
 }

/* Lê o arquivo XML e recebe um objeto com as informações */
 $xml = simplexml_load_file($nfe['tmp_name']);

 /* Campos da nf-e: se abrir um XML de uma nf-e
    serão estes campos apresentados */
// <ide>
  echo "ide<br>";
  echo "=====================================================";
  echo "<br>" .$ide_cUF       = $xml->NFe->infNFe->ide->cUF;   
  echo "<br>" .$ide_cNF       = $xml->NFe->infNFe->ide->cNF;   
  echo "<br>" .$ide_natOp     = $xml->NFe->infNFe->ide->natOp; 
  echo "<br>" .$ide_indPag    = $xml->NFe->infNFe->ide->indPag;
  echo "<br>" .$ide_mod       = $xml->NFe->infNFe->ide->mod;   
  echo "<br>" .$ide_serie     = $xml->NFe->infNFe->ide->serie; 
  echo "<br>" .$ide_nNF       = $xml->NFe->infNFe->ide->nNF;   
  echo "<br>" .$ide_dhEmi     = $xml->NFe->infNFe->ide->dhEmi; 
  echo "<br>" .$ide_tpNF      = $xml->NFe->infNFe->ide->tpNF;  
  echo "<br>" .$ide_idDest    = $xml->NFe->infNFe->ide->idDest;  
  echo "<br>" .$ide_cMunFG    = $xml->NFe->infNFe->ide->cMunFG;  
  echo "<br>" .$ide_tpImp     = $xml->NFe->infNFe->ide->tpImp;  
  echo "<br>" .$ide_tpEmis    = $xml->NFe->infNFe->ide->tpEmis;  
  echo "<br>" .$ide_cDV       = $xml->NFe->infNFe->ide->cDV;  
  echo "<br>" .$ide_tpAmb     = $xml->NFe->infNFe->ide->tpAmb;  
  echo "<br>" .$ide_finNFe    = $xml->NFe->infNFe->ide->finNFe;  
  echo "<br>" .$ide_indFinal  = $xml->NFe->infNFe->ide->indFinal;  
  echo "<br>" .$ide_indPres   = $xml->NFe->infNFe->ide->indPres;  
  echo "<br>" .$ide_procEmi   = $xml->NFe->infNFe->ide->procEmi;  
  echo "<br>" .$ide_verProc   = $xml->NFe->infNFe->ide->verProc;  
// </ide>

// <emit>
 echo "<br>emit<br>";
 echo "=====================================================";
 echo "<br>" .$emit_CNPJ  = $xml->NFe->infNFe->emit->CNPJ;
 echo "<br>" .$emit_xNome = $xml->NFe->infNFe->emit->xNome;
 echo "<br>" .$emit_xFant = $xml->NFe->infNFe->emit->xFant;
  //<enderEmit>
   echo "<br>enderEmit<br>";
   echo "<br>"  .$enderEmit_xLgr    = $xml->NFe->infNFe->emit->enderEmit->xLgr;
   echo "<br>"  .$enderEmit_nro     = $xml->NFe->infNFe->emit->enderEmit->nro;
   echo "<br>"  .$enderEmit_xBairro = $xml->NFe->infNFe->emit->enderEmit->xBairro;
   echo "<br>"  .$enderEmit_cMun    = $xml->NFe->infNFe->emit->enderEmit->cMun;
   echo "<br>"  .$enderEmit_xMun    = $xml->NFe->infNFe->emit->enderEmit->xMun;
   echo "<br>"  .$enderEmit_UF      = $xml->NFe->infNFe->emit->enderEmit->UF;
   echo "<br>"  .$enderEmit_CEP     = $xml->NFe->infNFe->emit->enderEmit->CEP;
   echo "<br>"  .$enderEmit_cPais   = $xml->NFe->infNFe->emit->enderEmit->cPais;
   echo "<br>"  .$enderEmit_xPais   = $xml->NFe->infNFe->emit->enderEmit->xPais;
   echo "<br>"  .$enderEmit_fone    = $xml->NFe->infNFe->emit->enderEmit->fone;
  //</enderEmit>
 echo "<br>"  .$emit_IE  = $xml->NFe->infNFe->emit->IE;
 echo "<br>"  .$emit_CRT = $xml->NFe->infNFe->emit->CRT;
// </emit>

// <dest>
 echo "<br>dest<br>";
 echo "=====================================================";
 echo "<BR>" .$dest_CNPJ = $xml->NFe->infNFe->dest->CNPJ;
 echo "<BR>" .$dest_xNome = $xml->NFe->infNFe->dest->xNome;
  //<enderDest>
    echo "<br>enderDest<br>";
    echo "<BR>" .$enderDest_xLgr    = $xml->NFe->infNFe->dest->enderDest->xLgr;
    echo "<BR>" .$enderDest_nro     = $xml->NFe->infNFe->dest->enderDest->nro;
    echo "<BR>" .$enderDest_xCpl    = $xml->NFe->infNFe->dest->enderDest->xCpl;
    echo "<BR>" .$enderDest_xBairro = $xml->NFe->infNFe->dest->enderDest->xBairro;
    echo "<BR>" .$enderDest_cMun    = $xml->NFe->infNFe->dest->enderDest->cMun;
    echo "<BR>" .$enderDest_xMun    = $xml->NFe->infNFe->dest->enderDest->xMun;
    echo "<BR>" .$enderDest_UF      = $xml->NFe->infNFe->dest->enderDest->UF;
    echo "<BR>" .$enderDest_CEP     = $xml->NFe->infNFe->dest->enderDest->CEP;
    echo "<BR>" .$enderDest_cPais   = $xml->NFe->infNFe->dest->enderDest->cPais;
    echo "<BR>" .$enderDest_xPais   = $xml->NFe->infNFe->dest->enderDest->xPais;
    echo "<BR>" .$enderDest_fone    = $xml->NFe->infNFe->dest->enderDest->fone;
  //</enderDest>
 echo "<BR>" .$dest_indIEDest= $xml->NFe->infNFe->dest->indIEDest;
// </dest>

// <prod>
  echo "<br>prod<br>";
  echo "=====================================================";
  echo "<br>";
  /* Percorre o objeto e imprime na tela as informações de cada produto */
  foreach ($xml->NFe->infNFe->det as $det){
    // <prod>
      echo $cProd    = $det->prod->cProd ."<br>";
      echo $cEAN     = $det->prod->cEAN ."<br>";
      echo $xProd    = $det->prod->xProd ."<br>";
      echo $NCM      = $det->prod->NCM ."<br>";
      echo $CEST     = $det->prod->CEST ."<br>";
      echo $CFOP     = $det->prod->CFOP ."<br>";
      echo $uCom     = $det->prod->uCom ."<br>";
      echo $qCom     = $det->prod->qCom ."<br>";
      echo $vUnCom   = $det->prod->vUnCom ."<br>";
      echo $vProd    = $det->prod->vProd ."<br>";
      echo $cEANTrib = $det->prod->cEANTrib ."<br>";
      echo $uTrib    = $det->prod->uTrib ."<br>";
      echo $qTrib    = $det->prod->qTrib ."<br>";
      echo $vUnTrib  = $det->prod->vUnTrib ."<br>";
      echo $indTot   = $det->prod->indTot ."<br>";
    // </prod>
    // <imposto>
      echo "<br>imposto<br>";
      echo "=====================================================";
        echo "<BR>" .$vTotTrib = $det->imposto->vTotTrib;
          // <ICMS>
            // <ICMS60>
              echo "<BR>" .$ICMS_orig       = $det->imposto->ICMS->ICMS60->orig;
              echo "<BR>" .$ICMS_CST        = $det->imposto->ICMS->ICMS60->CST;
              echo "<BR>" .$ICMS_vBCSTRet   = $det->imposto->ICMS->ICMS60->vBCSTRet;
              echo "<BR>" .$ICMS_vICMSSTRet = $det->imposto->ICMS->ICMS60->vICMSSTRet;
            //</ICMS60>
          // </ICMS>
          // <PIS>
           // <PISAliq>
            echo "<BR>" .$PIS_CST  = $det->imposto->PIS->PISAliq->CST;
            echo "<BR>" .$PIS_vBC  = $det->imposto->PIS->PISAliq->CSTvBC;
            echo "<BR>" .$PIS_pPIS = $det->imposto->PIS->PISAliq->CSTpPIS;
            echo "<BR>" .$PIS_vPIS = $det->imposto->PIS->PISAliq->CSTvPIS;
           // </PISAliq>
          // </PIS>
          // <COFINS>
           // <COFINSAliq>
            echo "<BR>" .$COFINS_CST     = $det->imposto->COFINS->COFINSAliq->CST;
            echo "<BR>" .$COFINS_vBC     = $det->imposto->COFINS->COFINSAliq->vBC;
            echo "<BR>" .$COFINS_pCOFINS = $det->imposto->COFINS->COFINSAliq->pCOFINS;
            echo "<BR>" .$COFINS_vCOFINS = $det->imposto->COFINS->COFINSAliq->vCOFINS;
           // </COFINSAliq>
          // </COFINS>
        echo "<br>=====================================================<br>";
    // </imposto>
  }
// </prod>

// <total>
  echo "<br>Total<br>";
  echo "=====================================================";
  //<ICMSTot>
  echo "<BR>" .$vBC        = $xml->NFe->infNFe->total->ICMSTot->vBC;
  echo "<BR>" .$vICMS      = $xml->NFe->infNFe->total->ICMSTot->vICMS;
  echo "<BR>" .$vICMSDeson = $xml->NFe->infNFe->total->ICMSTot->vICMSDeson;
  echo "<BR>" .$vBCST      = $xml->NFe->infNFe->total->ICMSTot->vBCST;
  echo "<BR>" .$vST        = $xml->NFe->infNFe->total->ICMSTot->vST;
  echo "<BR>" .$vProd      = $xml->NFe->infNFe->total->ICMSTot->vProd;
  echo "<BR>" .$vFrete     = $xml->NFe->infNFe->total->ICMSTot->vFrete;
  echo "<BR>" .$vSeg       = $xml->NFe->infNFe->total->ICMSTot->vSeg;
  echo "<BR>" .$vDesc      = $xml->NFe->infNFe->total->ICMSTot->vDesc;
  echo "<BR>" .$vII        = $xml->NFe->infNFe->total->ICMSTot->vII;
  echo "<BR>" .$vIPI       = $xml->NFe->infNFe->total->ICMSTot->vIPI;
  echo "<BR>" .$vPIS       = $xml->NFe->infNFe->total->ICMSTot->vPIS;
  echo "<BR>" .$vCOFINS    = $xml->NFe->infNFe->total->ICMSTot->vCOFINS;
  echo "<BR>" .$vOutro     = $xml->NFe->infNFe->total->ICMSTot->vOutro;
  echo "<BR>" .$vNF        = $xml->NFe->infNFe->total->ICMSTot->vNF;
  echo "<BR>" .$vTotTrib   = $xml->NFe->infNFe->total->ICMSTot->vTotTrib;
  //</ICMSTot>
// </total>

// <transp>
  echo "<br>transp<br>";
  echo "=====================================================";
  echo "<BR>" .$transp_modFrete = $xml->NFe->infNFe->transp->modFrete;
  // <transporta>
   echo "<br>transporta<br>";
   echo "<BR>" .$transporta_xNome  = $xml->NFe->infNFe->transp->transporta->xNome;
   echo "<BR>" .$transporta_xEnder = $xml->NFe->infNFe->transp->transporta->xEnder;
   echo "<BR>" .$transporta_UF     = $xml->NFe->infNFe->transp->transporta->UF;
  // <transporta>
  // <vol>
   echo "<br>vol<br>";
   echo "<BR>" .$vol_qVol  = $xml->NFe->infNFe->transp->vol->qVol;
   echo "<BR>" .$vol_esp   = $xml->NFe->infNFe->transp->vol->esp;
   echo "<BR>" .$vol_nVol  = $xml->NFe->infNFe->transp->vol->nVol;
   echo "<BR>" .$vol_pesoL = $xml->NFe->infNFe->transp->vol->pesoL;
   echo "<BR>" .$vol_pesoB = $xml->NFe->infNFe->transp->vol->pesoB;
  // </vol>
// </transp>

// <cobr>
 // <dup>
    echo "<br>cobr<br>";
    echo "=====================================================";
    echo "<br>" .$dup_nDup  = $xml->NFe->infNFe->cobr->dup->nDup;
    echo "<br>" .$dup_dVenc = $xml->NFe->infNFe->cobr->dup->dVenc;
    echo "<br>" .$dup_vDup  = $xml->NFe->infNFe->cobr->dup->vDup;
 // </dup>
// </cobr>

// <infAdic>
    echo "<br>infAdic<br>";
    echo "=====================================================";
    echo "<br>" .$infAdic_infCpl  = $xml->NFe->infNFe->infAdic->infCpl;
// </infAdic>


//<chNFe>
    echo "<br>chNFe<br>";
    echo "=====================================================";
    echo "<br>" .$chNFe  = $xml->protNFe->infProt->chNFe;
//</chNFe>
?>