Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Frankie Hummel

Como ler os produtos do XML da NFe

Recommended Posts

Bom dia pessoal, estou com um problema preciso dar carga no sistema aqui da empresa feito em PHP onde esse sistema lê o xml enviado pelo fornecedor e capta os dados dos produtos para eu inserir no Banco Mysql o problema é que todo o tutorial que peguei de leitura de xml nenhum consegue capturar os nó de produto. Segue abaixo um modelo do xml

 

<?xml version="1.0" encoding="UTF-8"?>
<nfeProc versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">
	<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
		<infNFe versao="2.00" Id="NFe31130802460736000330550010000021611000021622">
			<ide>
				<cUF>31</cUF>
				<cNF>00002162</cNF>
				<natOp>VENDA FORA DO ESTADO</natOp>
				<indPag>1</indPag>
				<mod>55</mod>
				<serie>1</serie>
				<nNF>2161</nNF>
				<dEmi>2013-08-02</dEmi>
				<dSaiEnt>2013-08-02</dSaiEnt>
				<hSaiEnt>09:47:11</hSaiEnt>
				<tpNF>1</tpNF>
				<cMunFG>3106200</cMunFG>
				<tpImp>1</tpImp>
				<tpEmis>1</tpEmis>
				<cDV>2</cDV>
				<tpAmb>1</tpAmb>
				<finNFe>1</finNFe>
				<procEmi>0</procEmi>
				<verProc>3.21.00</verProc>
			</ide>
			<emit>
				<CNPJ>02460736000330</CNPJ>
				<xNome>dfdsdsfdsf</xNome>
				<xFant>sdfsdfs</xFant>
				<enderEmit>
					<xLgr>AV. MEM DE SA</xLgr>
					<nro>448</nro>
					<xBairro>SANTA EFIGENIA</xBairro>
					<cMun>3106200</cMun>
					<xMun>BELO HORIZONTE</xMun>
					<UF>MG</UF>
					<CEP>30260270</CEP>
					<cPais>1058</cPais>
					<xPais>Brasil</xPais>
					<fone>30710667</fone>
				</enderEmit>
				<IE>0627366830177</IE>
				<CRT>3</CRT>
			</emit>
			<dest>
				<CNPJ>04340862000114</CNPJ>
				<xNome>EMPRESA TESTE</xNome>
				<enderDest>
					<xLgr>R sdfdsfdsf</xLgr>
					<nro>013</nro>
					<xBairro>dsfsdfs</xBairro>
					<cMun>3306305</cMun>
					<xMun>sdfsdfdsfsdfsdfsd</xMun>
					<UF>RJ</UF>
					<CEP>345435345</CEP>
					<cPais>1058</cPais>
					<xPais>Brasil</xPais>
					<fone>23423423</fone>
				</enderDest>
				<IE>77302891</IE>
				<email>sfsdfsdfsd@dasd.com</email>
			</dest>
			<det nItem="1">
				<prod>
					<cProd>62383</cProd>
					<cEAN>7891040075546</cEAN>
					<xProd>CAVILON SPRAY - 3346E *SDC* 1FR - 3M DO BRASIL</xProd>
					<NCM>30051090</NCM>
					<CFOP>6108</CFOP>
					<uCom>FR</uCom>
					<qCom>2.0000</qCom>
					<vUnCom>102.7500000000</vUnCom>
					<vProd>205.50</vProd>
					<cEANTrib>7891040075546</cEANTrib>
					<uTrib>FR</uTrib>
					<qTrib>2.0000</qTrib>
					<vUnTrib>102.7500000000</vUnTrib>
					<indTot>1</indTot>
					<med>
						<nLote>201602BA</nLote>
						<qLote>2.000</qLote>
						<dFab>2013-02-01</dFab>
						<dVal>2016-02-28</dVal>
						<vPMC>0.00</vPMC>
					</med>
				</prod>
				<imposto>
					<ICMS>
						<ICMS00>
							<orig>5</orig>
							<CST>00</CST>
							<modBC>3</modBC>
							<vBC>205.50</vBC>
							<pICMS>12.00</pICMS>
							<vICMS>24.66</vICMS>
						</ICMS00>
					</ICMS>
					<PIS>
						<PISAliq>
							<CST>01</CST>
							<vBC>205.50</vBC>
							<pPIS>1.65</pPIS>
							<vPIS>3.39</vPIS>
						</PISAliq>
					</PIS>
					<COFINS>
						<COFINSAliq>
							<CST>01</CST>
							<vBC>205.50</vBC>
							<pCOFINS>7.60</pCOFINS>
							<vCOFINS>15.62</vCOFINS>
						</COFINSAliq>
					</COFINS>
				</imposto>
				<infAdProd>Lote:201602BA 28/02/2016</infAdProd>
			</det>
			<det nItem="2">
				<prod>
					<cProd>66991</cProd>
					<cEAN>7899095215580</cEAN>
					<xProd>CLONAZEPAM 2,5MG/ML *G* - B1 20ML - GEOLAB</xProd>
					<NCM>30049069</NCM>
					<CFOP>6108</CFOP>
					<uCom>FR</uCom>
					<qCom>3.0000</qCom>
					<vUnCom>1.5000000000</vUnCom>
					<vProd>4.50</vProd>
					<cEANTrib>7899095215580</cEANTrib>
					<uTrib>FR</uTrib>
					<qTrib>3.0000</qTrib>
					<vUnTrib>1.5000000000</vUnTrib>
					<indTot>1</indTot>
					<med>
						<nLote>1302423</nLote>
						<qLote>3.000</qLote>
						<dFab>2013-05-01</dFab>
						<dVal>2015-05-30</dVal>
						<vPMC>4.54</vPMC>
					</med>
				</prod>
				<imposto>
					<ICMS>
						<ICMS00>
							<orig>0</orig>
							<CST>00</CST>
							<modBC>3</modBC>
							<vBC>4.50</vBC>
							<pICMS>12.00</pICMS>
							<vICMS>0.54</vICMS>
						</ICMS00>
					</ICMS>
					<PIS>
						<PISNT>
							<CST>04</CST>
						</PISNT>
					</PIS>
					<COFINS>
						<COFINSNT>
							<CST>04</CST>
						</COFINSNT>
					</COFINS>
				</imposto>
				<infAdProd>Lote:1302423 30/05/2015</infAdProd>
			</det>
			<det nItem="3">
				<prod>
					<cProd>66990</cProd>
					<cEAN>7899095245181</cEAN>
					<xProd>RANITIDINA XPE 150MG/10ML + SER DOS *G* 120ML - GEOLAB</xProd>
					<NCM>30049059</NCM>
					<CFOP>6108</CFOP>
					<uCom>FR</uCom>
					<qCom>7.0000</qCom>
					<vUnCom>5.7500000000</vUnCom>
					<vProd>40.25</vProd>
					<cEANTrib>7899095245181</cEANTrib>
					<uTrib>FR</uTrib>
					<qTrib>7.0000</qTrib>
					<vUnTrib>5.7500000000</vUnTrib>
					<indTot>1</indTot>
					<med>
						<nLote>1301866</nLote>
						<qLote>7.000</qLote>
						<dFab>2013-03-01</dFab>
						<dVal>2015-03-30</dVal>
						<vPMC>23.31</vPMC>
					</med>
				</prod>
				<imposto>
					<ICMS>
						<ICMS00>
							<orig>0</orig>
							<CST>00</CST>
							<modBC>3</modBC>
							<vBC>40.25</vBC>
							<pICMS>12.00</pICMS>
							<vICMS>4.83</vICMS>
						</ICMS00>
					</ICMS>
					<PIS>
						<PISNT>
							<CST>04</CST>
						</PISNT>
					</PIS>
					<COFINS>
						<COFINSNT>
							<CST>04</CST>
						</COFINSNT>
					</COFINS>
				</imposto>
				<infAdProd>Lote:1301866 30/03/2015</infAdProd>
			</det>
			<det nItem="4">
				<prod>
					<cProd>65877</cProd>
					<cEAN>7898087340019</cEAN>
					<xProd>DERSANI HIDRATANTE *S* - *IPI (22) *C/C* 200ML - DAUDT</xProd>
					<NCM>33049990</NCM>
					<CFOP>6108</CFOP>
					<uCom>UN</uCom>
					<qCom>16.0000</qCom>
					<vUnCom>12.0000000000</vUnCom>
					<vProd>192.00</vProd>
					<cEANTrib>7898087340019</cEANTrib>
					<uTrib>UN</uTrib>
					<qTrib>16.0000</qTrib>
					<vUnTrib>12.0000000000</vUnTrib>
					<indTot>1</indTot>
					<med>
						<nLote>130545</nLote>
						<qLote>16.000</qLote>
						<dFab>2013-05-01</dFab>
						<dVal>2015-05-30</dVal>
						<vPMC>0.00</vPMC>
					</med>
				</prod>
				<imposto>
					<ICMS>
						<ICMS00>
							<orig>0</orig>
							<CST>00</CST>
							<modBC>3</modBC>
							<vBC>192.00</vBC>
							<pICMS>12.00</pICMS>
							<vICMS>23.04</vICMS>
						</ICMS00>
					</ICMS>
					<IPI>
						<cEnq>999</cEnq>
						<IPITrib>
							<CST>50</CST>
							<vBC>192.00</vBC>
							<pIPI>0.00</pIPI>
							<vIPI>0.00</vIPI>
						</IPITrib>
					</IPI>
					<PIS>
						<PISNT>
							<CST>04</CST>
						</PISNT>
					</PIS>
					<COFINS>
						<COFINSNT>
							<CST>04</CST>
						</COFINSNT>
					</COFINS>
				</imposto>
				<infAdProd>Lote:130545 30/05/2015</infAdProd>
			</det>
			<det nItem="5">
				<prod>
					<cProd>62100</cProd>
					<cEAN>7897316801673</cEAN>
					<xProd>EPITEZAN POM OFTALMICA 3,5GR - ALLERGAN FARMA</xProd>
					<NCM>30042011</NCM>
					<CFOP>6108</CFOP>
					<uCom>UN</uCom>
					<qCom>2.0000</qCom>
					<vUnCom>8.1600000000</vUnCom>
					<vProd>16.32</vProd>
					<cEANTrib>7897316801673</cEANTrib>
					<uTrib>UN</uTrib>
					<qTrib>2.0000</qTrib>
					<vUnTrib>8.1600000000</vUnTrib>
					<indTot>1</indTot>
					<med>
						<nLote>F38399</nLote>
						<qLote>2.000</qLote>
						<dFab>2013-03-20</dFab>
						<dVal>2014-09-20</dVal>
						<vPMC>10.27</vPMC>
					</med>
				</prod>
				<imposto>
					<ICMS>
						<ICMS00>
							<orig>0</orig>
							<CST>00</CST>
							<modBC>3</modBC>
							<vBC>16.32</vBC>
							<pICMS>12.00</pICMS>
							<vICMS>1.96</vICMS>
						</ICMS00>
					</ICMS>
					<PIS>
						<PISNT>
							<CST>04</CST>
						</PISNT>
					</PIS>
					<COFINS>
						<COFINSNT>
							<CST>04</CST>
						</COFINSNT>
					</COFINS>
				</imposto>
				<infAdProd>Lote:F38399 20/09/2014</infAdProd>
			</det>
			<det nItem="6">
				<prod>
					<cProd>66714</cProd>
					<cEAN>7896242150275</cEAN>
					<xProd>ARISCORTEN 500MG PO LIOF 50FA - ARISTON</xProd>
					<NCM>30043210</NCM>
					<CFOP>6108</CFOP>
					<uCom>CX</uCom>
					<qCom>1.0000</qCom>
					<vUnCom>246.0000000000</vUnCom>
					<vProd>246.00</vProd>
					<cEANTrib>7896242150275</cEANTrib>
					<uTrib>CX</uTrib>
					<qTrib>1.0000</qTrib>
					<vUnTrib>246.0000000000</vUnTrib>
					<indTot>1</indTot>
					<med>
						<nLote>1305108C</nLote>
						<qLote>1.000</qLote>
						<dFab>2013-05-01</dFab>
						<dVal>2015-05-30</dVal>
						<vPMC>632.51</vPMC>
					</med>
				</prod>
				<imposto>
					<ICMS>
						<ICMS00>
							<orig>0</orig>
							<CST>00</CST>
							<modBC>3</modBC>
							<vBC>246.00</vBC>
							<pICMS>12.00</pICMS>
							<vICMS>29.52</vICMS>
						</ICMS00>
					</ICMS>
					<PIS>
						<PISNT>
							<CST>04</CST>
						</PISNT>
					</PIS>
					<COFINS>
						<COFINSNT>
							<CST>04</CST>
						</COFINSNT>
					</COFINS>
				</imposto>
				<infAdProd>Lote:1305108C 30/05/2015</infAdProd>
			</det>
			<det nItem="7">
				<prod>
					<cProd>61575</cProd>
					<cEAN>7894916203524</cEAN>
					<xProd>DAFORIN 20MG - C1 30CPR - EMS S/A</xProd>
					<NCM>30049049</NCM>
					<CFOP>6108</CFOP>
					<uCom>CX</uCom>
					<qCom>4.0000</qCom>
					<vUnCom>5.1000000000</vUnCom>
					<vProd>20.40</vProd>
					<cEANTrib>7894916203524</cEANTrib>
					<uTrib>CX</uTrib>
					<qTrib>4.0000</qTrib>
					<vUnTrib>5.1000000000</vUnTrib>
					<indTot>1</indTot>
					<med>
						<nLote>521710</nLote>
						<qLote>4.000</qLote>
						<dFab>2013-02-01</dFab>
						<dVal>2015-02-28</dVal>
						<vPMC>32.68</vPMC>
					</med>
				</prod>
				<imposto>
					<ICMS>
						<ICMS00>
							<orig>0</orig>
							<CST>00</CST>
							<modBC>3</modBC>
							<vBC>20.40</vBC>
							<pICMS>12.00</pICMS>
							<vICMS>2.45</vICMS>
						</ICMS00>
					</ICMS>
					<PIS>
						<PISNT>
							<CST>04</CST>
						</PISNT>
					</PIS>
					<COFINS>
						<COFINSNT>
							<CST>04</CST>
						</COFINSNT>
					</COFINS>
				</imposto>
				<infAdProd>Lote:521710 28/02/2015</infAdProd>
			</det>
			<total>
				<ICMSTot>
					<vBC>724.97</vBC>
					<vICMS>87.00</vICMS>
					<vBCST>0.00</vBCST>
					<vST>0.00</vST>
					<vProd>724.97</vProd>
					<vFrete>0.00</vFrete>
					<vSeg>0.00</vSeg>
					<vDesc>0.00</vDesc>
					<vII>0.00</vII>
					<vIPI>0.00</vIPI>
					<vPIS>3.39</vPIS>
					<vCOFINS>15.62</vCOFINS>
					<vOutro>0.00</vOutro>
					<vNF>724.97</vNF>
				</ICMSTot>
			</total>
			<transp>
				<modFrete>0</modFrete>
				<transporta>
					<CNPJ>02082008000412</CNPJ>
					<xNome>MVG TRANSPORTES</xNome>
					<IE>0627154640170</IE>
					<xEnder>AV MAJOR DELFINO DE PAULA, 2630 SAO FRANCISCO</xEnder>
					<xMun>BELO HORIZONTE</xMun>
					<UF>MG</UF>
				</transporta>
				<vol>
					<qVol>1</qVol>
					<esp>Volume(s)</esp>
				</vol>
			</transp>
			<cobr>
				<fat>
					<nFat>2161</nFat>
					<vOrig>724.97</vOrig>
					<vLiq>724.97</vLiq>
				</fat>
				<dup>
					<nDup>2161/1</nDup>
					<dVenc>2013-09-13</dVenc>
					<vDup>724.97</vDup>
				</dup>
			</cobr>
			<infAdic>

O Xml não tá completo mas preciso da ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como nosso amigo já citou pode fazer com o simpleXML (exemplo de uso aqui).

 

Mais ou menos assim:

if (file_exists('xml.xml')) {
    $xml = simplexml_load_file('xml.xml');
    foreach ($xml->prod as $prod) {
        echo strval($prod->cProd), '<br/>';
    }
}
else {
    exit('Falha ao abrir xml.xml.');
}

Montei somente de exemplo mesmo o xml.

<?xml version="1.0" encoding="UTF-8"?>
<produto>
    <prod>
        <cProd>62383</cProd>
        <cEAN>7891040075546</cEAN>
        <xProd>CAVILON SPRAY - 3346E *SDC* 1FR - 3M DO BRASIL</xProd>
        <NCM>30051090</NCM>
        <CFOP>6108</CFOP>
        <uCom>FR</uCom>
        <qCom>2.0000</qCom>
        <vUnCom>102.7500000000</vUnCom>
        <vProd>205.50</vProd>
        <cEANTrib>7891040075546</cEANTrib>
        <uTrib>FR</uTrib>
        <qTrib>2.0000</qTrib>
        <vUnTrib>102.7500000000</vUnTrib>
        <indTot>1</indTot>
        <med>
            <nLote>201602BA</nLote>
            <qLote>2.000</qLote>
            <dFab>2013-02-01</dFab>
            <dVal>2016-02-28</dVal>
            <vPMC>0.00</vPMC>
        </med>
    </prod>
        <prod>
        <cProd>62384</cProd>
        <cEAN>7891040075546</cEAN>
        <xProd>CAVILON SPRAY - 3346E *SDC* 1FR - 3M DO BRASIL</xProd>
        <NCM>30051090</NCM>
        <CFOP>6108</CFOP>
        <uCom>FR</uCom>
        <qCom>2.0000</qCom>
        <vUnCom>102.7500000000</vUnCom>
        <vProd>205.50</vProd>
        <cEANTrib>7891040075546</cEANTrib>
        <uTrib>FR</uTrib>
        <qTrib>2.0000</qTrib>
        <vUnTrib>102.7500000000</vUnTrib>
        <indTot>1</indTot>
        <med>
            <nLote>201602BA</nLote>
            <qLote>2.000</qLote>
            <dFab>2013-02-01</dFab>
            <dVal>2016-02-28</dVal>
            <vPMC>0.00</vPMC>
        </med>
    </prod>
</produto>

Espero que ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então AngeloRubin

 

Vi seu exemplo era isso mesmo mas o problema é que cada produto é um ítem no xml que é separado assim:

<det nItem="6">

<det nItem="7">

e por ai vai nesse momento que não to sabendo o que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então AngeloRubin

 

Vi seu exemplo era isso mesmo mas o problema é que cada produto é um ítem no xml que é separado assim:

<det nItem="6">

<det nItem="7">

e por ai vai nesse momento que não to sabendo o que fazer.

 

Nesse caso você está querendo pegar os atributos do nó. Só usar $node->attributes().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando DOMDocument fica simples

 

<?php

$filename = 'file.xml';
$DOMDocument = new DOMDocument( '1.0', 'UTF-8' );
$DOMDocument->preserveWhiteSpace = false;
$DOMDocument->load( $filename );
$products = $DOMDocument->getElementsByTagName( 'prod' );

foreach( $products as $product )
{
    printf( '<strong>Produto:</strong> %s<br/>
             <strong>Valor:</strong> %01.2f<br/>', 
            $product->getElementsByTagName( 'xProd' )->item( 0 )->nodeValue,
            $product->getElementsByTagName( 'vUnCom' )->item( 0 )->nodeValue
    );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.