Rafael Clares


Ler XML com PHP
Agosto 17, 2008, 12:25 am
Arquivado em: XML | Tags: , ,

Lendo um arquivo XML com o PHP5

Veremos como ler um arquivo XML utilizando o método SimpleXML no PHP5, depois que escrevi como criar um arquivo XML com PHP nada mais interessante que saber como ler o arquivo.

Começaremos criando um arquivo XML bem simples, escreva o código abaixo e salve como:

livros.xml

<?xml version=”1.0″ encoding=”iso-8859-1″?>
   <livros>
  <livro>
   <cod>01</cod>
   <titulo>PHP para iniciantes</titulo>
   <descricao>Desenvolvendo Aplicações web</descricao>
   <autor>Manuel da Silva</autor>
   <paginas>200</paginas>
   <preco>5.00</preco>
  </livro>
  <livro>
   <cod>02</cod>
   <titulo>XML</titulo>
   <descricao>Usando XML com PHP </descricao>
   <autor>José das Couves</autor>
   <paginas>100</paginas>
   <preco>15.00</preco>
  </livro>
</livros> 

Agora que já temos o XML vamos criar o arquivo PHP, salve-o com o nome que quiser.

index.php

<?
#carrega o arquivo XML e retornando um Array
$xml = simplexml_load_file(“livros.xml”);
# se o xml for um link e nao um arquivo como livros.xml, troque -o pelo link ex.
# $xml = simplexml_load_file(“http://endereco/link/mesmoQueNaoTenhaExtensaoXML/“);

#para cada nó LIVRO  atribui à variavel $livro (obj simplexml)
foreach($xml->livro as $livro)
{
 echo $livro->cod;
 #usando o utf8_decode para exibir com acentos
 echo utf8_decode($livro->titulo);
 echo utf8_decode($livro->autor);
 echo utf8_decode($livro->descricao);
 echo $livro->preco;
 echo “<br>”;
}
?>

Muito simples! O nome do método não é em vão! ;)

Bem, agora basta você formatar a saida dos dados, utilize tags html formatadas com CSS, um exemplo pode ser como abaixo:

echo “<p><b>Título:</b> “ .utf8_decode($livro->titulo) . “</p>”;

Como está no comentário no código, a função simplexml_load_file carrega um arquivo XML retornando seu conteúdo em um Array, se quiser ver o formato desse array criado pela função e atribuído à variável $xml, utilize a função do PHP print_r que serve para exibir um array na tela. O resultado será como mostrado abaixo:

O comando print_r($xml) resultará em:

SimpleXMLElement Object
(
    [livro] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [cod] => 01
                    [titulo] => PHP para iniciantes
                    [descricao] => Desenvolvendo Aplicações web
                    [autor] => Manuel da Silva
                    [paginas] => 200
                    [preco] => 5.00
                )

            [1] => SimpleXMLElement Object
                (
                    [cod] => 02
                    [titulo] => XML
                    [descricao] => Usando XML com PHP
                    [autor] => José das Couves
                    [paginas] => 100
                    [preco] => 15.00
                )

            [2] => SimpleXMLElement Object
                (
                    [cod] => 03
                    [titulo] => Javascript
                    [descricao] => O Poder do javascript
                    [autor] => Billy Borny
                    [paginas] => 80
                    [preco] => 9.90
                )

        )

)

Links:

Documentação do SimpleXML:  SimpleXML
Documentação do utf8_decode: utf8_decode

Abraços e até o próximo post.  ;)

 


12 Comentários até o momento
Deixe um comentário

Valeu a dica e o como fazer um xml… gostei

Comentário por simei

Parabéns pelo código rapaz.
Muito útil para quem está começando.
Me serviu bem.

Comentário por Alexandro Costa

Colega,
Estou tentando implementar um codigo pra ler as acoes da bovespa, mas o formato gerado pelo webservice deles é diferente.

Olhe só:
http://www.bovespa.com.br/Cotacoes2000/formCotacoesMobile.asp?codsocemi=PETR4

Código gerado

Ou seja, tem uma chave, e várias informacoes dentro deste…

Você sabe como fazer a leitura de cada campo de informacao nesse caso ?

Grato

Comentário por Guilherme

Olá Guilherme, é preciso ler os atributos do nó!
Faça o seguinte:

$xml = simplexml_load_file("linkDaBovestaAqui");
foreach($xml->PAPEL[0]->attributes() as $a => $b) {
echo "$a = $b ";
}

Espero ter ajudado!

Comentário por Rafael Clares

Cara,valeu demais,tava procurando por isso !

Comentário por Allan

Olá!
Muito legal o artigo! Parabéns e obrigado, ajuda muitas pessoas!
Tenho uma dúvida:

gostaria de ler os valores Low, High e text.. como procedo neste caso?

Obrigado!

Comentário por Andrei

Ah, nem me liguei nos códigos html e aspas.. aqui vai corrigido, sem os códigos:
yweather:forecast day=Thu low=17 high=27 text=Mostly Cloudy

Comentário por Andrei

Andrei, obrigado pelo comentário.
Cara, preciso ver o XML inteiro para te ajudar. Mas de toda forma a solução será a mesma que dei 3 comentários acima para o Guilherme.
Trata-se de ler os atributos de um nó com o método attributes() do simplexml.

foreach($xml->SuaTagNo[0]->attributes() as $a => $b) {
echo “$a = $b “;
}
Sem o XML inteiro não rola, se quiser me envie o link do XML ou o arquivo (rafadinix@gmail.com).

flw

Comentário por Rafael Clares

Olá!
Inicialmente, obrigado pela resposta e a ajuda!
O xml (rss) que quero utilizar é este:
http://weather.yahooapis.com/forecastrss?p=BRXX1781&u=c

achei outras formas de extrair os dados que quero, mas nao buscando especificamente o nó do xml, só usando a função preg_match() mesmo.

Se puder ajudar, excelente, mas nem se estresse muito também.
obrigado!

Comentário por Andrei

Very nice!!!

simple_xml always!

thanks

Comentário por luiz tarabal

Excelente explicação! Será muito útil pra mim!

Muito obrigado!

Comentário por klonder

Vlw pakas! ajudou bastante! era o que eu estava precisando. =D

Comentário por Eduardo Faria




Deixe um comentário
Linhas e parágrafos quebram automaticamente, endereços de email não serão mostrados, HTML permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>