Guga01 0 Denunciar post Postado Março 2, 2010 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
Douglas 6 Denunciar post Postado Março 2, 2010 Use a SimpleXMLElement::xpath - http://br.php.net/manual/en/simplexmlelement.xpath.php Compartilhar este post Link para o post Compartilhar em outros sites
Guga01 0 Denunciar post Postado Março 2, 2010 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