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
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Valeu a dica e o como fazer um xml… gostei
Comentário por simei Setembro 10, 2008 @ 12:09 amParabéns pelo código rapaz.
Comentário por Alexandro Costa Novembro 27, 2008 @ 12:39 pmMuito útil para quem está começando.
Me serviu bem.
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 Fevereiro 13, 2009 @ 11:53 pmOlá 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 Fevereiro 14, 2009 @ 12:32 amCara,valeu demais,tava procurando por isso !
Comentário por Allan Março 12, 2009 @ 2:37 pmOlá!
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 Março 19, 2009 @ 8:49 pmAh, nem me liguei nos códigos html e aspas.. aqui vai corrigido, sem os códigos:
Comentário por Andrei Março 19, 2009 @ 8:51 pmyweather:forecast day=Thu low=17 high=27 text=Mostly Cloudy
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 Março 20, 2009 @ 3:00 pmOlá!
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.
Comentário por Andrei Março 20, 2009 @ 3:28 pmobrigado!
Very nice!!!
simple_xml always!
thanks
Comentário por luiz tarabal Julho 8, 2009 @ 7:31 amExcelente explicação! Será muito útil pra mim!
Muito obrigado!
Comentário por klonder Outubro 28, 2009 @ 2:49 amVlw pakas! ajudou bastante! era o que eu estava precisando. =D
Comentário por Eduardo Faria Novembro 5, 2009 @ 6:34 pm