Ir para conteúdo

POWERED BY:

Arquivado

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

Guga01

Lendo dados XML com PHP

Recommended Posts

Olá pessoal!

 

Tenho um sistema onde faço a importação de dados xml. A estrutura do xml é a seguinte:

 

<produtos>
<produto>
<codigo>31119</codigo>
<categoria>Diversos</categoria>
<nome>GUARDA BRINQUEDOS ABELHA (BRASKIT)</nome>
<descricao>Agora as crianças vão ajudar as mamães a guardar os brinquedos nessa linda abelha. As hastes de montagem são articuladas, super fácil de montar e guardar.</descricao>
<quantidade>1.000</quantidade>
<pesbru>1.00</pesbru>
<preco>49.9000</preco>
<fabricante>BRASKIT</fabricante>
<foto>31119.jpg</foto>
</produto>

<produto>
<codigo>50857</codigo>
<categoria>Diversos</categoria>
<categoria>Brinquedos Pedagógicos</categoria>
<categoria>Unisex</categoria>
<categoria>Diversos</categoria>
<categoria>Até R$ 50,00</categoria>
<nome>FUNRISE - SHELCORE - VOLANTE MACIO MUSICAL (GULLIVER)</nome>
<descricao>Volante Macio Musical da Gulliver. As luzes,sons ( em inglês), cores e personagens do volante estimularão a imaginação de toda criança, tecidos macios incentivam o tato, os vários recuros funcioais ajudam a desenvolver a coordenação motora e os sentidos, o estímulo à ajuda no aprendizado e na descoberta, ensina sobre causa e efeito. 
Com aproximadamente 20cm de diâmetro.
Utiliza 2 pilhas ´AA´ já incluidas</descricao>
<quantidade>2.000</quantidade>
<pesbru>0.29</pesbru>
<preco>44.9000</preco>
<fabricante>GULLIVER</fabricante>
<foto>50857.jpg</foto>
</produto>
</produtos>

Cada produto pode estar relacionado a uma ou mais categorias como no exemplo acima. Para pegar os dados do xml, tenho o seguinte código:

 

$xml = simplexml_load_file($arquivoXML);
			
foreach ($xml as $produto)
{
	$codigoDesktop = $produto->codigo;
	$categoria = $produto->categoria;
	$categoria1 = utf8_decode($categoria);
	$nome = $produto->nome;
	$nome1 = utf8_decode($nome);
	$descricao = $produto->descricao;
	$descricao1 = utf8_decode($descricao);
	$descricao2 = nl2br($descricao1);
	$quantidade = $produto->quantidade;
	$pesoBruto = $produto->pesbru;
	$preco = $produto->preco;
	$fabricante = $produto->fabricante;
	$fabricante1 = utf8_decode($fabricante);
	$foto = $codigoDesktop . ".jpg";

	...
}

O problema é que dessa forma só consigo pegar uma categoria. Como devo fazer para pegar todas as categorias de um determinado produto quando existir? Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Douglas!

 

Estou tentando usar o xpath que você falou. Ele pega todas as categorias, mas está repetindo as mesmas para todos produtos, inclusive para os que não possuem categoria. Vou colocar o código abaixo para você ter uma idéia:

 

arquivo xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<produtos>
<produto>
<codigo>19</codigo>
<categoria></categoria>
<nome>MÓBILE MUSICAL CARAS ENG. (TAPUZIM)</nome>
<descricao>Móbile musical à corda. Os caracteres dançam e giram gentilmente, chamando a atenção do bebê. Recomendado para crianças a partir de 0 (zero) meses.
Material: suportes em plástico e bichinhos de pelúcia.</descricao>
<quantidade>2.000</quantidade>
<pesbru>0.70</pesbru>
<preco>99.9000</preco>
<fabricante>TAPUZIM</fabricante>
<foto>19.jpg</foto>
</produto>

<produto>
<codigo>41416</codigo>
<categoria>Unisex</categoria>
<categoria>Até R$ 50,00</categoria>
<categoria>Acima de 3 anos</categoria>
<categoria>Personagens</categoria>
<nome>WALL-E ACTION FIGURES EVE (YELLOW)</nome>
<descricao>Esta miniatura  do Eve mede aproximadamente 6cm de altura.</descricao>
<quantidade>0.000</quantidade>
<pesbru>0.08</pesbru>
<preco>29.9000</preco>
<fabricante>YELLOW</fabricante>
<foto>41416.jpg</foto>
</produto>
</produtos>

E o código para ler esse xml é:

 

<?php
		$xml = simplexml_load_file('teste.xml');
			
			foreach ($xml as $produto)
			{
				$codigoDesktop = $produto->codigo;
				echo "-----------------------------------------------------------------------<br />";
				echo "Código: " . $codigoDesktop . "<br /><br />";
				//$categoria = $produto->categoria;
				foreach ($xml->xpath('produto/categoria') as $categoriaX)
				{				
					echo $categoriaX . "<br />";
				}
				echo "------------------------------------------------------------------------";
				//$categoria1 = utf8_decode($categoria);
				$nome = $produto->nome;
				$nome1 = utf8_decode($nome);
				$descricao = $produto->descricao;
				$descricao1 = utf8_decode($descricao);
				$descricao2 = nl2br($descricao1);
				$quantidade = $produto->quantidade;
				$pesoBruto = $produto->pesbru;
				$preco = $produto->preco;
				$fabricante = $produto->fabricante;
				$fabricante1 = utf8_decode($fabricante);
				$foto = $codigoDesktop . ".jpg";
			}
	?>

Tentei usar a variável $produto->xpath mas não funcionou. O que devo fazer? Obrigado!

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.