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 enrolaçã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çã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çã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ção da festa com tags por exemplo
]]>
</texto>
</evento>
PHP
$xml = simplexml_load_file('programacao.xml');
$n_eventos = 5;
$i = 0;
foreach($xml->evento as $evento){
if( $i < $n_eventos and $evento->data < date('Y-m-d') ){
echo "<strong>".$evento->data." - ".$evento->titulo."</strong>";
echo '<div>';
echo $evento->texto;
echo "</div>";
$i++;
}
}
Bom vamos começar, na linha 1, a função simplexml_load_file('programacao.xml');
cria um objeto SimpleXML a partir 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 utilizaríamos $xml->evento[0]->data
, simples não. Também poderíamos 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 utilizaríamos $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