Boteco Digital

XML nem tudo deve ir para o banco de dados

Olá pessoal, hoje gostaria de compartilhar uma coisa que me ocorreu quando um cliente pediu para colocar uma simples listagem dos eventos que promovia e que fossem sumindo a medida que aconteciam. Claro como todo desenvolvedor web, a primeira coisa que eu pensei foi utilizar um banco de dados.

Examinando com um pouco mais de atenção um banco de dados nem sempre é a melhor escolha, neste caso por exemplo, as informações seriam alteradas ou adicionas muito raramente e seria eu mesmo que as faria. Então porque gastar tempo criando um sistemas de gerenciamento ou alterar dados utilizando o phpmyadmin quando um simples XML velho de guerra resolve.

Devo admitir que faz pouco tempo que comecei a utilizar XML, quando comecei a apreender PHP as formas de ler XML eram um pouco complicadas, mas com a chegada do PHP 5 isso foi resolvido com a classe SimpleXML que está muito fácil de se trabalhar.Bom vamos parar de enrrolação então e vamos a um exemplo.

<evento>
     <titulo>Festa 1</titulo>
     <data>2008-05-08</data>
    <![CDATA[
        <b>Festa, festa, festa!!!</b> -
        descri&ccedil;&atilde;o da festa com tags por exemplo
    ]]>
   </texto>
</evento>

<evento>
     <titulo>Festa 2</titulo>
     <data>2008-06-08</data>
     <texto><![CDATA[
             <b>Festa, festa, festa!!!</b> -
             descri&ccedil;&atilde;o da festa com tags por exemplo
             ]]>
     </texto>
</evento>

<evento>
    <titulo>Festa 4</titulo>
    <data>2008-07-08</data>
    <texto><![CDATA[
        <b>Festa, festa, festa!!!</b> -
        descri&ccedil;&atilde;o da festa com tags por exemplo
        ]]>
     </texto>
</evento>

PHP

$xml = simplexml_load_file('programacao.xml');

 $n_eventos = 5;
 $i = 0;
 foreach($xml-&gt;evento as $evento){
     if( $i &lt; $n_eventos and $evento-&gt;data &lt; date('Y-m-d') ){
         echo "<strong>".$evento-&gt;data." - ".$evento-&gt;titulo."</strong>";
         echo '<div>';
         echo $evento-&gt;texto;
         echo "</div>";
         $i++;
     }
}

Bom vamos começar, na linha 1, a função simplexml_load_file(‘programacao.xml’); cria um objeto SimpleXML apartir de um arquivo, no caso ‘programacao.xml’. Na linha 3 definimos a quantidade de eventos que será exibida e na linha 4 iniciamos o contador $i com 0.

A partir da linha 5 começa o laço foreach, como podemos ver para acessar um nó do XML é bastante simples, basta utilizar o operador -> para acessar um nó ou array de nós, sendo que cada nó pode conter alguma informação ou outros nós, sendo utilizado assim, o operador em seqüência. Como exemplo, para acessar o nó data do primeiro evento utilizariamos $xml->evento[0]->data , simples não. Também poderiamos acessar o atributo de um nó de forma semelhante, por exemplo, se nó data <data diasemana=”Segunda-feira”>2008-07-08</data> para acessá-lo utilizariamos $xml->evento[0]->data[‘diasemana’];, entenderam?

Na linha 6 testamos se o contador $i não atingiu o número de eventos, e se a data do evento($evento->data) ainda não passou, ou seja é maior que a data de hoje ( date(‘Y-m-d’)).

Da linha 7 à 10 concatenamos algumas tags HTML e alguns dados dos nós para dar forma a informação que desejamos exibir e logo após incrementamos o contador $i.

Quem quiser pode fazer o download do exemplo aqui

Espero que esse pequeno tutorialzinho tenha sido útil, aguardem que em breve farei mais alguns, não só PHP.

T++.c

Categorias PHP
comments powered by Disqus