Ler e reescrever XML com 3 níveis
Olá pessoal, sou nova aqui no fórum e esto precisando muito da ajuda de vocês. É o seguinte. Tenho o seguinte XML em que preciso ler reescrever o item <preco> no seguinte formato(9999,99).
<?xml version="1.0" encoding="utf-8"?>
<estoque>
<veiculo>
<id>998877</id>
<placa>6050</placa>
<marca id="14">AUDI</marca>
<modelo id="72"> A5 </modelo>
<versao id="434"> 2.0 16V Turbo Active </versao>
<anofabricacao>2013</anofabricacao>
<anomodelo>2014</anomodelo>
<cambio id="1">Automático</cambio>
<km>28160</km>
<portas>4</portas>
<cor id="11">Prata</cor>
<combustivel id="5">Flex</combustivel>
<preco>R$ 92.900,00</preco>
<observacao> Veículo em excelente estado de conservação.</observacao>
<complementos>
<complemento id="5">IPVA Pago</complemento>
<complemento id="6">Licenciado</complemento>
<complemento id="10">Manual do proprietário</complemento>
</complementos>
<opcionais>
<opcional id="54">Air bag</opcional>
<opcional id="4">Alarme</opcional>
<opcional id="6">Ar condicionado</opcional>
<opcional id="8">Ar quente</opcional>
<opcional id="12">Bancos de couro</opcional>
<opcional id="15">Computador de bordo</opcional>
<opcional id="18">Desembaçador traseiro</opcional>
<opcional id="19">Direção elétrica</opcional>
<opcional id="23">Freios ABS</opcional>
<opcional id="29">Retrovisores elétricos</opcional>
<opcional id="30">Rodas de liga leve</opcional>
<opcional id="36">Travas elétricas</opcional>
<opcional id="38">Vidros elétricos</opcional>
<opcional id="39">Vidros verdes</opcional>
<opcional id="1">Air bag do motorista</opcional>
<opcional id="2">Air bag do passageiro</opcional>
<opcional id="42">Alarme anti-furto</opcional>
<opcional id="43">Alarme velocidade</opcional>
<opcional id="62">Aviso sonoro de faróis acesos</opcional>
<opcional id="9">Banco com regulagem elétrica</opcional>
<opcional id="10">Banco do motorista com ajuste de altura</opcional>
<opcional id="11">Banco traseiro bipartido</opcional>
<opcional id="13">Bancos dianteiros com aquecimento</opcional>
<opcional id="14">Check control</opcional>
<opcional id="44">Coluna de direção com regulagem de altura</opcional>
<opcional id="16">Controle automático de velocidade</opcional>
<opcional id="17">Controle de tração</opcional>
<opcional id="21">Encosto de cabeça traseiro</opcional>
<opcional id="22">Faróis de milha</opcional>
<opcional id="45">Freio a disco nas 4 rodas</opcional>
<opcional id="41">Freios ABS c/ EBD</opcional>
<opcional id="25">Piloto automático</opcional>
<opcional id="48">Pintura metálica</opcional>
<opcional id="26">Porta-copos</opcional>
<opcional id="27">Relógio digital</opcional>
<opcional id="55">Retrovisor com pisca</opcional>
<opcional id="28">Retrovisor fotocrômico</opcional>
<opcional id="64">Retrovisores na cor do veículo</opcional>
<opcional id="31">Sensor de chuva</opcional>
<opcional id="32">Sensor de estacionamento</opcional>
<opcional id="53">Temporizador do limpador do para-brisa</opcional>
<opcional id="40">Volante com regulagem de altura</opcional>
<opcional id="57">Volante em couro</opcional>
</opcionais>
<acessorios>
<acessorio id="30">Alto falantes dianteiros</acessorio>
<acessorio id="31">Alto falantes traseiros</acessorio>
<acessorio id="42">Brake light</acessorio>
<acessorio id="65">Chave cópia</acessorio>
<acessorio id="18">Farol xenônio</acessorio>
<acessorio id="32">Antena no teto</acessorio>
<acessorio id="71">Luz de cortesia no teto</acessorio>
</acessorios>
<fotos>
<foto>fotos/6050_01.jpg</foto>
<foto>fotos/6050_02.jpg</foto>
<foto>fotos/6050_03.jpg</foto>
</fotos>
</veiculo>
<veiculo>
<id>778899</id>
<placa>9262</placa>
<marca id="39">FIAT</marca>
<modelo id="332"> PALIO </modelo>
<versao id="2369"> 1.6 MPI Sporting 16V </versao>
<tipomotor/>
<anofabricacao>2013</anofabricacao>
<anomodelo>2014</anomodelo>
<cambio id="3">Manual</cambio>
<km>33000</km>
<portas>4</portas>
<cor id="4">Branco</cor>
<combustivel id="5">Flex</combustivel>
<preco>R$ 35.900,00</preco>
<observacao> Veículo revisado, pneus em excelente estado.</observacao>
<complementos>
<complemento id="5">IPVA Pago</complemento>
<complemento id="6">Licenciado</complemento>
<complemento id="10">Manual do proprietário</complemento>
</complementos>
<opcionais>
<opcional id="54">Air bag</opcional>
<opcional id="4">Alarme</opcional>
<opcional id="7">Ar condicionado digital</opcional>
<opcional id="12">Bancos de couro</opcional>
<opcional id="20">Direção hidráulica</opcional>
<opcional id="23">Freios ABS</opcional>
<opcional id="24">Limpador traseiro</opcional>
<opcional id="29">Retrovisores elétricos</opcional>
<opcional id="30">Rodas de liga leve</opcional>
<opcional id="36">Travas elétricas</opcional>
<opcional id="37">Trio elétrico</opcional>
<opcional id="38">Vidros elétricos</opcional>
<opcional id="39">Vidros verdes</opcional>
<opcional id="44">Coluna de direção com regulagem de altura</opcional>
<opcional id="45">Freio a disco nas 4 rodas</opcional>
<opcional id="41">Freios ABS c/ EBD</opcional>
<opcional id="26">Porta-copos</opcional>
<opcional id="27">Relógio digital</opcional>
</opcionais>
<acessorios>
<acessorio id="37">Banco traseiro rebatível</acessorio>
<acessorio id="38">Bancos dianteiros reclináveis</acessorio>
<acessorio id="39">Bancos revestidos em tecido</acessorio>
</acessorios>
<fotos>
<foto>fotos/9262_01.jpg</foto>
<foto>fotos/9262_02.jpg</foto>
<foto>fotos/9262_03.jpg</foto>
<foto>fotos/9262_04.jpg</foto>
<foto>fotos/9262_05.jpg</foto>
</fotos>
</veiculo>
</estoque>
Acontece o seguinte, estou conseguindo ler os itens de primeiro nível e reescrever o valor <preco> no formato que desejo. O problema está na leitura dos itens que estão dentro dos nós <complementos>,<acessorios>, <opcionais> e <fotos>.
Estou usando o seuinte codigo:
<?php
// Faz o load do arquivo XML e retorna um objeto
$arquivo_xml = simplexml_load_file('modelo-xml.xml');
// Loop para ler o objeto
for ( $j = 0; $j < count( $arquivo_xml ); $j++ ) {
// Imprime o valor o valor da tag <id>
echo $arquivo_xml->veiculo[$j]->id . '<br>';
// Imprime o valor o valor da tag <placa>
echo $arquivo_xml->veiculo[$j]->placa . '<br>';
// Imprime o valor o valor da <marca>
echo $arquivo_xml->veiculo[$j]->marca . '<br>';
// Imprime o valor o valor da <modelo>
echo $arquivo_xml->veiculo[$j]->modelo . '<br>';
// Imprime o valor o valor da <versao>
echo $arquivo_xml->veiculo[$j]->versao . '<br>';
// Imprime o valor o valor da <anomodelo>
echo $arquivo_xml->veiculo[$j]->anomodelo . '<br>';
// Imprime o valor o valor da <image></image>
echo $arquivo_xml->veiculo[$j]->cambio . '<br>';
// Imprime o valor o valor da <km>
echo $arquivo_xml->veiculo[$j]->km . '<br>';
// Imprime o valor o valor da <potar>
echo $arquivo_xml->veiculo[$j]->portas . '<br>';
// Imprime o valor o valor da <cor>
echo $arquivo_xml->veiculo[$j]->cor . '<br>';
// Imprime o valor o valor da <combustivel>
echo $arquivo_xml->veiculo[$j]->combustivel . '<br>';
// Imprime o valor o valor da <preco>
echo str_replace(".","",substr( $arquivo_xml->veiculo[$j]->preco , 3)). '<br>';
// Imprime o valor o valor da description <image></image>
echo $arquivo_xml->veiculo[$j]->observacao . '<br>';
foreach($arquivo_xml->veiculo as $key => $item)
{
echo $item->complementos->complemento.'</br>';
}
// Apenas uma quebra de linha a mais
echo '<hr>';
}
?>
O resultado que me trás é este:
998877
6050
AUDI
A%
2.0 16V Turbo Active
2014
Automático
28160
4
Prata
Flex
92900,00
Veículo em excelente estado de conservação.
IPVA Pago
IPVA Pago
778899
9262
FIAT
PALIO
1.6 MPI Sporting 16V
2014
Manual
33000
4
Branco
Flex
35900,00
Veículo revisado, pneus em excelente estado.
IPVA Pago
IPVA Pago
Como faço para que os itens dentro dos atributos complementos, acessorios, opcionais e fotos sejam lidos? e possa reescrever um XML com estes valores?
Discussão (8)
Carregando comentários...