Ir para conteúdo

POWERED BY:

Arquivado

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

Welington Kleber

Ler xml usando simplexml_import_dom

Recommended Posts

Boa tarde.

 

estou utilizando a função simplexml_import_dom, para ler uma xml.

 

queria saber, se eu consigo identificar qual tag estou?

 

Exemplo:

 

 

 

  [det] => Array                        (                            [0] => SimpleXMLElement Object                                (                                    [@attributes] => Array                                        (                                            [nItem] => 1                                        )                                    [prod] => SimpleXMLElement Object                                        (                                            [cProd] => 970.010                                            [cEAN] => SimpleXMLElement Object                                                (                                                )                                            [xProd] => POLICORTE                                            [NCM] => 84615090                                            [EXTIPI] => 000                                            [CFOP] => 5949                                            [uCom] => PC                                            [qCom] => 1                                            [vUnCom] => 350.00000                                            [vProd] => 350.00                                            [cEANTrib] => SimpleXMLElement Object                                                (                                                )                                            [uTrib] => PC                                            [qTrib] => 1                                            [vUnTrib] => 350                                            [indTot] => 1                                            [nItemPed] => 10                                        )

 

Por exemplo, estou na tag xProd, ai prencho a váriavel $xProd.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer criar variáveis utilizando o nome do node? Se for, pode tentar com um extract() (talvez não funcione porque a estrutura do XML é um array multi-dimensional) ou utilizar um foreach()...

 

:joia:

 

Preciso dar um insert numa tabela, e cada tag ex. xProd, é um valor, que tenho que pegar ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nos mostre como está fazendo, o que está conseguindo e o que pretende conseguir... Mas não cole tudo, pegue apenas um pedaço do XML, por exemplo, um ou dois atributos que deseja trabalhar, e tentaremos te ajudar...

 

:joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostaria de trabalhar com a tag [det]

 

[det] => Array                (                    [0] => SimpleXMLElement Object                        (                            [@attributes] => Array                                (                                    [nItem] => 1                                )                            [prod] => SimpleXMLElement Object                                (                                    [cProd] => 970.010                                    [cEAN] => SimpleXMLElement Object                                        (                                        )                                    [xProd] => POLICORTE                                    [NCM] => 84615090                                    [EXTIPI] => 000                                    [CFOP] => 5949                                    [uCom] => PC                                    [qCom] => 1                                    [vUnCom] => 350.00000                                    [vProd] => 350.00                                    [cEANTrib] => SimpleXMLElement Object                                        (                                        )                                    [uTrib] => PC                                    [qTrib] => 1                                    [vUnTrib] => 350                                    [indTot] => 1                                    [nItemPed] => 10                                )

 

Preciso das seguintes informações:

 

Ex: Na tag cProd , preciso pegar a informação: 970.010

 

 

[prod] => SimpleXMLElement Object                                (                                    [cProd] => 970.010                                    [cEAN] => SimpleXMLElement Object                                        (                                        )                                    [xProd] => POLICORTE                                    [NCM] => 84615090                                    [EXTIPI] => 000                                    [CFOP] => 5949                                    [uCom] => PC                                    [qCom] => 1                                    [vUnCom] => 350.00000                                    [vProd] => 350.00                                    [cEANTrib] => SimpleXMLElement Object

 

No momento, só estou passando tudo dentro de um array.

 

$filename = "produtos.xml";
$xmlstr = file_get_contents($filename);

$dom = new domDocument();
$dom->loadXML($xmlstr);
$xml = simplexml_import_dom($dom);

echo '<pre>'."\n";
print_r($xml);
echo '</pre>'."\n";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Atualizando ... consegui pegar as tags que eu preciso e os valores, só estou com um problema.

 

Vamos lá, fiz desta maneira:

 

try
{
    $object = simplexml_load_file('produtos.xml');
    foreach($object->NFe as $key => $item)
    {
        if(isset($item->infNFe))
        {
		$count = count($item->infNFe->det);
		echo $count.'<br><br>';
		for($i=0; $i < $count; $i++)
           {
           $cProd = $item->infNFe->det->prod->cProd;
           echo $cProd.'<br>';
		   
		   $xProd = $item->infNFe->det->prod->xProd;
           echo $xProd.'<br>';
		   
		   $NCM = $item->infNFe->det->prod->NCM;
		   echo $NCM.'<br>';
		   
		   $EXTIPI = $item->infNFe->det->prod->EXTIPI;
		   echo $EXTIPI.'<br>';
		   
		   $CFOP = $item->infNFe->det->prod->CFOP;
		   echo $CFOP.'<br>';
		   
		   $uCom = $item->infNFe->det->prod->uCom;
		   echo $uCom.'<br>';
		   
		   $qCom = $item->infNFe->det->prod->qCom;
		   echo $qCom.'<br>';
		   
		   $vUnCom = $item->infNFe->det->prod->vUnCom;
		   echo $vUnCom.'<br>';
		   
		   $vProd = $item->infNFe->det->prod->vProd;
		   echo $vProd.'<br>';
		   
		   $uTrib = $item->infNFe->det->prod->uTrib;
		   echo $uTrib.'<br>';
		   
		   $qTrib = $item->infNFe->det->prod->qTrib;
		   echo $qTrib.'<br>';
		   
		   $vUnTrib = $item->infNFe->det->prod->vUnTrib;
		   echo $vUnTrib.'<br>';
		   
		   $indTot = $item->infNFe->det->prod->indTot;
		   echo $indTot.'<br>';
		   
		   $nItemPed = $item->infNFe->det->prod->nItemPed;
		   echo $nItemPed.'<br>';
		   }
        }
    }
}
catch(Exception $e)
{
    echo $e->getMessage();
}

 

Está dentro de um loop, por na xml's, ter mais de 1 produto. Porém, ele só passa pela primeira tag de produto, e não consigo identificar a outra tag, para passar o loop.

 

Exemplo:

 

Quando tem mais de um item a tag fica assim:

 

 

+ <det nItem="1">
- <prod>
<cProd>970.010</cProd>
<cEAN />
<xProd>POLICORTE</xProd>
<NCM>84615090</NCM>
<EXTIPI>000</EXTIPI>
<CFOP>5949</CFOP>
<uCom>PC</uCom>
<qCom>1</qCom>
<vUnCom>350.00000</vUnCom>
<vProd>350.00</vProd>
<cEANTrib />
<uTrib>PC</uTrib>
<qTrib>1</qTrib>
<vUnTrib>350</vUnTrib>
<indTot>1</indTot>
<nItemPed>10</nItemPed>
</prod>
- <imposto>
- <ICMS>
- <ICMS40>
<orig>0</orig>
<CST>41</CST>
</ICMS40>
</ICMS>
- <PIS>
- <PISNT>
<CST>09</CST>
</PISNT>
</PIS>
- <COFINS>
- <COFINSNT>
<CST>09</CST>
</COFINSNT>
</COFINS>
</imposto>
</det>
+ <det nItem="2">
- <prod>
<cProd>970.004</cProd>
<cEAN />
<xProd>MAQUINA DE TRIT. PAPEL</xProd>
<NCM>84418000</NCM>
<EXTIPI>000</EXTIPI>
<CFOP>5949</CFOP>
<uCom>PC</uCom>
<qCom>1</qCom>
<vUnCom>800.00000</vUnCom>
<vProd>800.00</vProd>
<cEANTrib />
<uTrib>PC</uTrib>
<qTrib>1</qTrib>
<vUnTrib>800</vUnTrib>
<indTot>1</indTot>
<nItemPed>20</nItemPed>
</prod>
- <imposto>
- <ICMS>
- <ICMS40>
<orig>0</orig>
<CST>41</CST>
</ICMS40>
</ICMS>
- <PIS>
- <PISNT>
<CST>09</CST>
</PISNT>
</PIS>
- <COFINS>
- <COFINSNT>
<CST>09</CST>
</COFINSNT>
</COFINS>
</imposto>
</det

 

Se alguém puder ajudar ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem a sua dúvida, você quer trabalhar somente com as tags <det> e não estão sendo exibidas todas elas, é isso?

 

As demais tags, por exemplo: emitente, destinatário é exibida apenas 1 vez. Até ai sem problemas, pego todas as informações.

Mas a tag <det>, é a tag de produtos, e uma xml pode ter mais de um produto.

 

Primeiro fiz um count para saber quantas tags <det> existem (qntde de produtos). ok, tudo certo até aqui.

 

Ao fazer o foreach para preencher as variáveis, sempre passa na mesma tag <det> a primeira.

 

A unica forma que eu vi de identificar qual tag é, o produto 1, e produto 2. é:

 


 

 

[nItem] => 1
[nItem] => 2

 

Porém, não consigo usa-lá, desta forma que estou fazendo.

 

Deu pra entender?

 

Mais uma coisa, no array é exibido desta forma:

 

 

 

 [det] => Array                (                    [0] => SimpleXMLElement Object                        (                            [@attributes] => Array                                (                                    [nItem] => 1                                )                            [prod] => SimpleXMLElement Object

 

No código:

 

 if(isset($item->infNFe))
        {
		$count = count($item->infNFe->det);
		echo $count.'<br><br>';
		
		for($i=0; $i < $count; $i++)
           {
           $cProd = $item->infNFe->det->prod->cProd;
           echo $cProd.'<br>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<?xml version="1.0" encoding="UTF-8" ?>
- <nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">
- <infNFe versao="2.00" Id="NFe35120107100026000150550010000292211133886243">
- <ide>
<cUF>35</cUF>
<cNF>13388624</cNF>
<natOp>EMPRESTIMO MAT. CONSUMO</natOp>
<indPag>0</indPag>
<mod>55</mod>
<serie>1</serie>
<nNF>29221</nNF>
<dEmi>2012-01-11</dEmi>
<dSaiEnt>2012-01-11</dSaiEnt>
<hSaiEnt>15:26:31</hSaiEnt>
<tpNF>1</tpNF>
<cMunFG>3518800</cMunFG>
- <NFref>
<refNFe>3500000000000000000000000000000000000000</refNFe>
</NFref>
<tpImp>1</tpImp>
<tpEmis>1</tpEmis>
<cDV>3</cDV>
<tpAmb>1</tpAmb>
<finNFe>1</finNFe>
<procEmi>0</procEmi>
<verProc>NFe_Util v2.0</verProc>
</ide>
- <emit>
<CNPJ>000000000000000000</CNPJ>
<xNome>TESTE TESTE LTDA</xNome>
<xFant>TESTE</xFant>
- <enderEmit>
<xLgr>TESTE</xLgr>
<nro>105</nro>
<xBairro>TESTE</xBairro>
<cMun>3518800</cMun>
<xMun>TESTE</xMun>
<UF>SP</UF>
<CEP>000000</CEP>
<cPais>1058</cPais>
<xPais>Brasil</xPais>
<fone>00000000</fone>
</enderEmit>
<IE>00000000</IE>
<IM>0</IM>
<CNAE>0000000</CNAE>
<CRT>3</CRT>
</emit>
+ <dest>
<CNPJ>61064911000177</CNPJ>
<xNome>TESTE</xNome>
- <enderDest>
<xLgr>TESTE</xLgr>
<nro>0</nro>
<xBairro>TESTE</xBairro>
<cMun>3538709</cMun>
<xMun>TESTE</xMun>
<UF>SP</UF>
<CEP>000000</CEP>
<cPais>1058</cPais>
<xPais>Brasil</xPais>
<fone>00000000</fone>
</enderDest>
<IE>000000000</IE>
</dest>
- <det nItem="1">
- <prod>
<cProd>970.010</cProd>
<cEAN />
<xProd>POLICORTE</xProd>
<NCM>84615090</NCM>
<EXTIPI>000</EXTIPI>
<CFOP>5949</CFOP>
<uCom>PC</uCom>
<qCom>1</qCom>
<vUnCom>350.00000</vUnCom>
<vProd>350.00</vProd>
<cEANTrib />
<uTrib>PC</uTrib>
<qTrib>1</qTrib>
<vUnTrib>350</vUnTrib>
<indTot>1</indTot>
<nItemPed>10</nItemPed>
</prod>
- <imposto>
- <ICMS>
- <ICMS40>
<orig>0</orig>
<CST>41</CST>
</ICMS40>
</ICMS>
- <PIS>
- <PISNT>
<CST>09</CST>
</PISNT>
</PIS>
- <COFINS>
- <COFINSNT>
<CST>09</CST>
</COFINSNT>
</COFINS>
</imposto>
</det>
+ <det nItem="2">
- <prod>
<cProd>970.004</cProd>
<cEAN />
<xProd>MAQUINA DE TRIT. PAPEL</xProd>
<NCM>84418000</NCM>
<EXTIPI>000</EXTIPI>
<CFOP>5949</CFOP>
<uCom>PC</uCom>
<qCom>1</qCom>
<vUnCom>800.00000</vUnCom>
<vProd>800.00</vProd>
<cEANTrib />
<uTrib>PC</uTrib>
<qTrib>1</qTrib>
<vUnTrib>800</vUnTrib>
<indTot>1</indTot>
<nItemPed>20</nItemPed>
</prod>
- <imposto>
- <ICMS>
- <ICMS40>
<orig>0</orig>
<CST>41</CST>
</ICMS40>
</ICMS>
- <PIS>
- <PISNT>
<CST>09</CST>
</PISNT>
</PIS>
- <COFINS>
- <COFINSNT>
<CST>09</CST>
</COFINSNT>
</COFINS>
</imposto>
</det>
+ <total>
- <ICMSTot>
<vBC>0.00</vBC>
<vICMS>0.00</vICMS>
<vBCST>0.00</vBCST>
<vST>0.00</vST>
<vProd>1150.00</vProd>
<vFrete>0.00</vFrete>
<vSeg>0.00</vSeg>
<vDesc>0.00</vDesc>
<vII>0.00</vII>
<vIPI>0.00</vIPI>
<vPIS>0.00</vPIS>
<vCOFINS>0.00</vCOFINS>
<vOutro>0.00</vOutro>
<vNF>1150.00</vNF>
</ICMSTot>
</total>
- <transp>
<modFrete>1</modFrete>
- <transporta>
<CNPJ>000000000000</CNPJ>
<xNome>TRASPORTADORA TESTE</xNome>
<IE>336742199111</IE>
<xEnder>TESTE</xEnder>
<xMun>TESTE</xMun>
<UF>SP</UF>
</transporta>
- <veicTransp>
<placa>EYJ1513</placa>
<UF>SP</UF>
</veicTransp>
- <vol>
<qVol>1</qVol>
<esp>UNIDADE</esp>
<pesoL>170.000</pesoL>
<pesoB>170.000</pesoB>
</vol>
</transp>
- <infAdic>
<infAdFisco>S/REMESSA NF. DE PESO 1000,00 -</infAdFisco>
<infCpl>" MATERIAL DE NOSSA PROPRIEDADE QUE SEGUE PARAUSO FORA DO ESTABELECIMENTO EM NOSSA MAQUINAQUE SE ENCONTRA EM EMPRESTIMO, COM POSTERIOR RETORNO"</infCpl>
</infAdic>
</infNFe>
- <SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
- <Reference URI="#NFe35120107100026000150550010000292211133886243">
- <Transforms>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>FJLUzqi/tWpjxQwATkYJRakriKY=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>cz7apKC27a81aDLDExyJ6o1uqQx7jcKD3zQ4ZcRMK41ffZJ9ffdxwTKvX97Eoq8vXUfxApWWv9kPklvtsHiVGTBuXnR4ZZnHVGY2UA7X6wQXnUXdW7G9V543b89tUYtnySRtOoe1Kf/JTcvl3qEtIt0WS7WOZXFEMrxYdTj5hJc=</SignatureValue>
- <KeyInfo>
- <X509Data>
<X509Certificate>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</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</NFe>
- <protNFe versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">
- <infProt>
<tpAmb>1</tpAmb>
<verAplic>SP_NFE_PL_006j</verAplic>
<chNFe>3000000000000000000000000000000000000000000</chNFe>
<dhRecbto>2012-01-11T15:24:27</dhRecbto>
<nProt>000000000000</nProt>
<digVal>FJLUzqi/tWpjxQwATkYJRakriKY=</digVal>
<cStat>100</cStat>
<xMotivo>Autorizado o uso da NF-e</xMotivo>
</infProt>
</protNFe>
</nfeProc>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Enfim, obrigado a todos que tentaram ajudar. Consegui ler todos os produtos da xml.

 

Para conhecimento:

 

try
{
    $object = simplexml_load_file('produtos.xml');
    foreach($object->NFe as $key => $item)
    {
	$count = count($item->infNFe->det);
    if(isset($item->infNFe))
        {	
		for($i=0; $i < $count; $i++)
           {
           $cProd = $item->infNFe->det[$i]->prod->cProd;
           echo $cProd.'<br>';
		   
		   $xProd = $item->infNFe->det[$i]->prod->xProd;
           echo $xProd.'<br>';
		   
		   $NCM = $item->infNFe->det[$i]->prod->NCM;
		   echo $NCM.'<br>';
		   
		   $EXTIPI = $item->infNFe->det[$i]->prod->EXTIPI;
		   echo $EXTIPI.'<br>';
		   
		   $CFOP = $item->infNFe->det[$i]->prod->CFOP;
		   echo $CFOP.'<br>';
		   
		   $uCom = $item->infNFe->det[$i]->prod->uCom;
		   echo $uCom.'<br>';
		   
		   $qCom = $item->infNFe->det[$i]->prod->qCom;
		   echo $qCom.'<br>';
		   
		   $vUnCom = $item->infNFe->det[$i]->prod->vUnCom;
		   echo $vUnCom.'<br>';
		   
		   $vProd = $item->infNFe->det[$i]->prod->vProd;
		   echo $vProd.'<br>';
		   
		   $uTrib = $item->infNFe->det[$i]->prod->uTrib;
		   echo $uTrib.'<br>';
		   
		   $qTrib = $item->infNFe->det[$i]->prod->qTrib;
		   echo $qTrib.'<br>';
		   
		   $vUnTrib = $item->infNFe->det[$i]->prod->vUnTrib;
		   echo $vUnTrib.'<br>';
		   
		   $indTot = $item->infNFe->det[$i]->prod->indTot;
		   echo $indTot.'<br>';
		   
		   $nItemPed = $item->infNFe->det[$i]->prod->nItemPed;
		   echo $nItemPed.'<br>';

		   }
        }
    }
}
catch(Exception $e)
{
    echo $e->getMessage();
}

 

Agora, só vou ler as demais tags, e fazer insert.

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.