Efetuando uma busca em um arquivo XML utilizando PHP5
Vimos em um outro post como ler um arquivo XML utilizando o SimpleXML, agora veremos como efetuar uma busca dentro de um arquivo XML.
Gerar, ler e transportar dados através em XML se tornou algo padrão em qualquer software seja on-line ou não. A partir disso podemos pensar:
- Antes de enviar dados em XML nós selecionamos adequadamente o que ele irá transportar.
Legal, é assim mesmo, nós selecionamos os dados do BD, geramos o XML e enviamos ou disponibilizamos para outro software.
Ok, mas e o software que vai receber esses dados? Ele não sabe o que está recebendo, não é?
Então pensando nisso nós escreveremos agora o código em PHP que terá o objetivo de ler o conteúdo do XML e selecionar apenas o que lhe interessa, assim como acontece na geração do arquivo.
A idéia a princípio e como todas as demais contidas nesse bloguinho é muito simples e servirá para que vocês possam a partir disso desenvolver linhas de raciocínios melhores ;)
Bem, a idéia é parecida com a do outro post, por isso aconselho dar uma lida nele antes.
Considerando que você acabou de ler o post sobre SimpleXML vamos começar o arquivo XML.
chamamos o arquivo de estante.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>50.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>150.00</preco>
</livro>
<livro>
<cod>03</cod>
<titulo>Javascript</titulo>
<descricao>O Poder do javascript</descricao>
<autor>Billy Borny</autor>
<paginas>80</paginas>
<preco>90.90</preco>
</livro>
</livros>
Como pode perceber o conteúdo do XML são livros e suas propriedades, então
Na tag “livros” possui 3 tags “livro” ou seja “livros” é a raiz e “livros” são o que chamamos de “nós“,
para cada tag livro existe o cod, titulo, descricao, autor, paginas e preco, o último é justamente o que iremos utilizar em nosso exemplo, iremos selecionar livros do XML de acordo com o preço que especificarmos.
Para isso precisamos ler o XML e fazer a seleção de acordo com os parâmetros que escolheremos.
o arquivo principal chamei-o de index.php mas você pode chamar de pamela.php se quiser.
<?php
# Carrega e armazena o XML na variavel $xml
$xml = simplexml_load_file(“estante.xml”);
# laço dentro da tag livro para cada tag livro que encontrar
foreach($xml->xpath(‘//livro‘) as $livro)
{
# armazena na var $registro o conteudo de uma tag livro
$registro = simplexml_load_string($livro->asXML());
# executa uma consulta XPath e armazena em $busca
$busca = $registro->xpath(‘//preco[.>55.00]‘);
# verificando se houve alguma busca com sucesso
if($busca){
# exibindo os resultados encontrados
echo $livro->titulo . “<br>”;
echo $livro->descricao . “<br>”;
echo $livro->preco . “<br><br>”;
}
}
?>
Acho que tem pouco para explicar sobre o PHP devido os comentários do código.
Mas, básicamente o que ocorre é que nós após carregarmos o arquivo XML efetuamos na linha
$busca = $registro->xpath(‘//preco[.>55.00]‘);
a seguinte verificação:
- procure dentro das tags livro onde o preco seja maior que 55.00, se reparar no arquivo XML irá perceber que somente 2 livros (nós) atendem à nossa condição e são eles que são exibidos como resultado. Neste caso estamos exibindo somente o título, descrição e preço, claro que podemos exibir todo o conteúdo do livro.
Muito díficil não é? Pois é …
Acredito que vale a pena se aprofundar nessa idéia de transporte de dados com XML, além de ser muito prático permite que dados de uma aplicação seja fácilmente integrados à qualquer outro sistema e esse parece ser o futuro do software, quando se fala em integração de sistemas não dá para pensar em outra coisa que não seja XML.
seguem alguns links:
- Post | Criando XML com PHP
- Post | Lendo XML com PHP
- Docs | SimpleXML | Consultas Xpath
- Exemplo | busca em xml
- Download | busca em xml – fontes
Aproveite para responder essa…
Àté a próxima,
abraços
Rafael Clares,
6 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>
Cara, muito bom seu post e seu blog tbm.
Comentário por Paulo Afonso Dezembro 4, 2008 @ 4:44 pmMas eu quero te fazer uma pergunta é uma dúvida minha.
Cara eu tenho uma página que gera o xml, mas para gerar preciso passar alguns parametros.
Dai fica a questão. Não consigo acessar esse XML sem antes passar paramêtros. Daí então não consigo somente usar essa função simplexml_load_file() pois dá a mensagem de erro: falta os paramêtros.
Tem alguma idéia de como me ajudar??
Valeu, Parabéns!
Entedi Paulo, leia sobre o simplexml_import_dom e simplexml_load_string no php.net. Lá tem a solução que você precisa.
Comentário por Rafael Clares Dezembro 5, 2008 @ 2:41 amachei uma função em curl.
Comentário por Paulo Dezembro 5, 2008 @ 12:04 pmMas na hora de retornar veio como texto.
Veio as informações todas juntas, não consegui associar o que é o que.
Vou continuar tentando.
Paulo, envia o arquivo que gera o XML no meu email (rafadinix@gmail.com), verei se posso te ajudar. Abraços
Comentário por Rafael Clares Dezembro 5, 2008 @ 12:07 pmOw nossa… eu criei um arquivo xml após o retorno e depois usei a função de ler… dai ficou mais facil.. pois eu estou manipulando o xml…
Comentário por Paulo Dezembro 5, 2008 @ 12:36 pmmas valeu cara pela ajuda…
tudo de bom
feliz natal
Ué Paulo, eu tinha te falado isso, passar seus parametros para gerar o xml, criar em arquivo, carregar, manipular, apagar xml e vc disse que não se tratava disso rs… Blz então…flw
Comentário por Rafael Clares Dezembro 5, 2008 @ 12:54 pm