Ir para conteúdo

Arquivado

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

osmarindy

capturar os valores de um nó filho de uma arquivo XML

Recommended Posts

Ola pessoal,
Tenho um arquivo kml, extensão do google earth, codificada em xml. nesse arquivo tenho diferentes elementos do google. como Poligonos, marcadores e caminhos. cada polígono representa uma área com informações de quantidade de clientes, de acordo com a quantidade de cada área a cor muda ex: 10%=vermelho, 60%= verde, etc...
o que preciso fazer é um formulário onde o usuário vai indicar o nome da área e a porcentagem e via php, preciso acessar o arquivo kml e alterar no elemento indicado a cor dele de acordo com o padrão fixo. porém, estou com o seguinte problema, não consigo acessar um nó filho dentro do código xml. por exemplo: tenho no codigo xml o elemento <Document> dentro desse elemento tenho o nó <folder> dentro desse nó tenho outro que tambem se chama <folder> neste nó tenho um elemento <Placemarck>, o código que tenho ele acessa apenas o primeiro elemento no caso seria <document>, como faço para acessar os demais elementos do código xml?

 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">     <head>          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />         <title>Soltel</title>     </head>     <body>         <h1>Soltel</h1>         <?php                 $link = "kml/uberlandia.kml"; //link do arquivo xml                 $xml = simplexml_load_file($link);//carrega o arquivo XML e retornando um Array                 //    print_r $xml;                 //var_dump($xml); //obs: neste ponto deveria acessar o elemento desejado.                 foreach($xml->Placemark as $Placemark){                     echo $Placemark->name;                     echo $Placemark->styleUrl;                 }         ?> </body> </html>  

 

<code xml>

<?xml version="1.0" encoding="UTF-8"?>
<Document>
<name>UBERLÂNDIA.kml</name>
<StyleMap id="m_ylw-pushpin">
<Pair>
<key>normal</key>
<styleUrl>#s_ylw-pushpin0</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#s_ylw-pushpin_hl0</styleUrl>
</Pair>
</StyleMap>
<Folder>
<name>UBERLÂNDIA</name>
<open>1</open>
<Folder>
<name>AREA</name>
<open>1</open>
<Placemark>
<name>jardim holanda</name>
<styleUrl>#m_ylw-pushpin</styleUrl>
<Polygon>
<tessellate>1</tessellate>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-48.32488777746115,-18.95959784475365,0 -48.32295861536939,-18.95929322524327,0 -48.32026405346004,-18.96352904573574,0 -48.31754942518452,-18.9665967776136,0 -48.31714072846297,-18.96665805302447,0 -48.3155376995926,-18.96656763591081,0 -48.31397776412899,-18.9664757646034,0 -48.31338294394784,-18.96634457250738,0 -48.31276911512214,-18.96613107482843,0 -48.31215336392997,-18.9655987807667,0 -48.31180539432194,-18.9650325341373,0 -48.31160030435869,-18.9643077285635,0 -48.31166765518667,-18.96064075494542,0 -48.30722885791366,-18.96045159254923,0 -48.31382253880895,-18.94886697414306,0 -48.32422865139704,-18.9506886200643,0 -48.32487875875525,-18.95103014922338,0 -48.32488777746115,-18.95959784475365,0
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Folder>
</Folder>
</Document>
</code> código abreviado

se deixar apenas o elemento <Placemark> no documento funciona normalmente.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Obrigado Anderson,
no meu caso fica da seguinte forma:

foreach($xml->Document->Folder->Folder->Placemark as $area) {
    $nome = $area->name;
$cor = $area->styleUrl;
}
Recebendo o elemento Placemarck como um objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por jfreiren
      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?
    • Por matheus.sdo
      Bom dia amigos... estou quebrando a cabeça aqui, tenho um XML com a estrutura
      <?xml version='1.0' ?> <meuxml> <Alunos> <Aluno1> <Nome>Carlos</Nome> <Idade>19</Idade> <Altura>1.58</Altura> <Peso>91kg</Peso> <ComidaFavorita>Frango</ComidaFavorita> </Aluno1> </Alunos> <Professores> <Professor1> <Nome>Augusto</Nome> <Idade>49</Idade> <Altura>1.78</Altura> <Peso>65kg</Peso> <ComidaFavorita>Capuccino</ComidaFavorita> </Professor1> </Professores> </meuxml> E para ler meu XML, fiz o seguinte:

      $link = "C:/xampp/htdocs/XML/meuxml.xml"; //link do arquivo xml $arquivo_xml = simplexml_load_file($link); //carrega o arquivo XML e retornando um Array $contador = 0; echo '<pre>'; //print_r( $arquivo_xml ); //Percorrendo todas as tags Matheus (no caso somente 1) foreach($arquivo_xml->children() as $meuxml){ //percorrendo todas as tags dentro da tag Matheus foreach($meuxml->children() as $Aluno){ $contador++; echo "Nome do aluno ".$contador." - ".$Aluno->Nome."</br>"; echo "Idade do aluno ".$contador." - ".$Aluno->Idade."</br>"; echo "Peso do aluno ".$contador." - ".$Aluno->Peso."</br>"; echo "Altura do aluno ".$contador." - ".$Aluno->Altura."</br>"; echo "Comida do aluno ".$contador." - ".$Aluno->ComidaFavorita."</br><p>"; } } A idéia, é ler somente os alunos (depois iria implementar os professores), porém dessa forma, ele lê o meu aluno1, e também lê meu professor1.
      Porém não mandei ele percorrer a tag Professores, e não entendi o que aconteceu.
      Alguém saberia me explicar o que está acontecendo até aqui ? Depois, pensei em fazer um foreach (fora do $aluno) para ler os professores.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.