Rafael Clares


Busca em XML com PHP
Dezembro 4, 2008, 1:12 am
Arquivado em: PHP, XML | Tags: , ,

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

Cara, muito bom seu post e seu blog tbm.
Mas 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!

Comentário por Paulo Afonso

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

achei uma função em curl.
Mas na hora de retornar veio como texto.
Veio as informações todas juntas, não consegui associar o que é o que.
Vou continuar tentando.

Comentário por Paulo

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

Ow 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…
mas valeu cara pela ajuda…
tudo de bom
feliz natal

Comentário por Paulo

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




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>