Ir para conteúdo

POWERED BY:

Arquivado

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

sco

XMLReader no PHP

Recommended Posts

Bom galera, estou há alguns dias tentando fazer uma leitura em um xml.

Até consegui pegar alguns valores, mas não consigo montar o array do jeito que eu quero.

Quero que o PHP leia uma estrutura parecida:

 

<meta>

<home>

<titulo>titulo</titulo>

<descricao>bla bla bla</descricao>

<palavras>palavras</palavras>

</home>

 

<contato>

<titulo>lalala</titulo>

<descricao>texto</descricao>

<palavras>lol</palavras>

</contato>

</meta>

 

um array com home e os valores em um array onde home apontasse para titulo e seu conteudo, descrição e conteúdo...

e assim por diante.

 

Quero poder entender a idéia.

 

Alguém me ajudar a fazer isso com XMLReader? Desde já agradeço =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim:

<?php

$XML = <<<XML
<meta>
<home>
      <titulo>titulo</titulo>
      <descricao>bla bla bla</descricao>
      <palavras>palavras</palavras>
</home>

<contato>
      <titulo>lalala</titulo>
      <descricao>texto</descricao>
      <palavras>lol</palavras>
</contato>
</meta>
XML;

     $DOMDocument = new DOMDocument( '1.0' , 'utf-8' );
     $DOMDocument->preserveWhiteSpace = false;
     $DOMDocument->loadXML( $XML );
     foreach ( $DOMDocument->getElementsByTagName( 'meta' ) as $Nodes ) {
                 foreach ( $Nodes->getElementsByTagName( '*' ) as $Node ) {
                             $Data[ $Node->parentNode->nodeName ][ $Node->nodeName ] = $Node->nodeValue;
                 }
                $Dados[ $Nodes->nodeName ] = $Data;
     }
     unset( $Dados[ 'meta' ][ 'meta' ] );
     echo '<pre>';
     print_r( $Dados );

 

Utilizando DOMDocument, fica mais bacana .. pelo menos ( eu ) acho, saída:

Array
(
   [meta] => Array
       (
           [home] => Array
               (
                   [titulo] => titulo
                   [descricao] => bla bla bla
                   [palavras] => palavras
               )

           [contato] => Array
               (
                   [titulo] => lalala
                   [descricao] => texto
                   [palavras] => lol
               )

       )

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado Andrey, era isso mesmo que eu queria.

Usando o DOMDocument é muito mais fácil, passei mais de uma semana tentando com XMLReader e nada....

Vlw =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como é que é, Andrey?

DOMDocument não é legal pra ler documentos grandes, então se você tem um xml muuuuuuuuito grande, você usa XMLReader, aí você lê enquanto precisa.

Por exemplo, você tem um XML com 1 milhão de nodes, então você precisa achar um kara que a posição da node dele é indefinida, ele pode estar em 999 ou 13333 ... com o XMLReader, você vai fazer tipo um ( é esse ? não ( continua ) : achei ( parei aqui ) ) ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah tá! É que não tinha entendido pelo post anterior :P

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.