Ir para conteúdo

POWERED BY:

Arquivado

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

Lucas Cardial

Ler tags filhas iguais de uma xml

Recommended Posts

Estou importando os dados de uma NFe para o mysql.

A questão é que as xmls das NFe geram uma tag pai para cada produto, e as tags são sempre as mesmas:

 

<det>
	<prod>
		<xProd>Nome do produto</xProd>
		<vProd>Valor do produto</xProd>
	</prod>
</det>
<det>...</det>
<det>...</det>
<det>...</det>
<det>...</det> 

Eu preciso ler o conteúdo de cada tag "det", porém só consigo ler a primeira tag.

 

código:

<?php 
foreach (glob($dir.'*.xml') as $obj) {
	ini_set('default_charset', 'UTF-8');
	$xml = simplexml_load_file($obj);

	$produto = $xml->NFe->infNFe->det->prod->xProd;
	$valor= $xml->NFe->infNFe->det->prod->vProd;
}
 ?>

 

Resolvi com este método:

<?php 
function dom($dir){
	foreach (glob($dir.'*.xml') as $obj) {
		$filename = $obj;
		$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
			);
		}
	}
}
	dom('../../arquivos/xml/');
 ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estava com o mesmo problema, resolvi dessa forma:

 

<?php

	try {
	    $object = simplexml_load_file($arquivo);
	    foreach($object->NFe as $key => $item) {	    	
	        if(isset($item->infNFe)) {	

	        	//LENDO AS INFORMAÇÕES DE PRODUTOS NA NF-e (XML)
	        	$semResultado = 0;
	        	for ($i=0; $i <=1000 ; $i++) { 
	        		if(!empty($item->infNFe->det[$i]->prod->cProd)){
	        			$semResultado = 0;
	        			echo "<br><br>Info do produto:";
	        			echo "<br>Código: ".$item->infNFe->det[$i]->prod->cProd;
	        			echo "<br>Nome: ".$item->infNFe->det[$i]->prod->xProd;
	        			echo "<br>NCM: ".$item->infNFe->det[$i]->prod->NCM;
	        			echo "<br>Valor: ".$item->infNFe->det[$i]->prod->vProd;
	        		} else {
	        			//CONTANDO QUANDO NÃO HOUVER RESULTADOS
	        			$semResultado ++;
	        		}

	        		//SE N TIVER RESULTADOS EM SEQUENCIA, PARAR O FOR
	        		if($semResultado >= 10){
	        			break;
	        		}
	        	} // FIM DO FOR
	        	
	        }
	    }
	}

 

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.