Criando um XML com PHP
Muito tem se usado ultimamente o XML. O XML é uma forma prática de trafegar dados entre servidores. E pode ser gerado dinamicamente como veremos neste artigo.
Veja a seguinte situação:
Você tem uma agenda de aniversariantes. Nela você tem nomes, datas, emails, dos seus contatos que estão aniversariando. (Você pode ter o exemplo que quiser aqui.).
Você quer exportar isso para outro banco de dados, seja ele em um servidor Unix, Windows, etc. Seja para qual banco de dados for. O que você quer, é poder transferir estes dados para qualquer local. Ou mesmo gerar para que outro sistema o leia, seja ele em PHP, ASP, JAVA, etc! Pois bem, com XML você pode fazer isso!
O que você fará, é uma requisição ao banco de dados, gerando os dados dos aniversariantes, e com isso, gerando um xml válido, para ser lido por outros sistemas.
Começando pelo select ao banco de dados:
Usualmente, estou usando a minha tabela flaviatestes.
<?php require_once('../../Connections/testes.php'); // lembrando que esta é uma conexão padrão
do Dreamweaver, pra que reinventar a roda? :) ?>
<?php
mysql_select_db($database_testes, $testes);
$query_aniversarios = "SELECT * FROM aniversariantes";
$aniversarios = mysql_query($query_aniversarios, $testes) or die(mysql_error());
$row_aniversarios = mysql_fetch_assoc($aniversarios);
$totalRows_aniversarios = mysql_num_rows($aniversarios);
Um arquivo XML é composto por alguns itens básicos, como esta linha:
<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
Esta linha é o cabeçalho (de acordo com o W3C), de um XML válido.
Então crio uma variável chamada $xml. Nela conterá o cabeçalho mencionado acima, e os nós onde constarão as informações:
// abrindo o documento XML
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"> // abrindo o nó principal <dadosAniversariantes>"; // abrindo o while com os dados dos aniversariantes, isso delimita
um bloco de aniversariantes com seus respectivos dados(subnós) dentro deste nó do { // abrindo um nó com o nome aniversariantes. cada nó neste,
conterá dentro os sub nós com as informações
$xml .="<aniversariante> // subnós de informações - nome, email, data de aniversário
<nomePessoa>'".$row_aniversarios['nome']."'</nomePessoa>
<emailPessoa>'".$row_aniversarios['email']."'</emailPessoa>
<dataAniversario>'".$row_aniversarios['dataniver']."'</dataAniversario> // fechando nó 'aniversariante'
</aniversariante>"; // fechando o while dos dados
} while ($row_aniversarios = mysql_fetch_assoc($aniversarios)); // fechando o nó principal
$xml .="</dadosAniversariantes>";
Exibindo o xml gerado:
echo $xml;
// e liberando a consulta do banco, o que é sempre uma boa prática :)
mysql_free_result($aniversarios); ?>
Um documento XML decente, é composto basicamente por: tudo o que abre, fecha. Se vc abriu um nó <aniversariantes>, não esqueça de fechá-la (</aniversariantes>) e assim sucessivamente.
Este arquivo não foi validado no W3C, mas mesmo arquivos gerados por eles, aparecem com erros, então tá difícil confiar no validador online, se mesmo os xmls de exemplo dão a mensagem "XML not Valid"...
Para ver o xml deste artigo em funcionamento, clique aqui
Dúvidas, fjferr@gmail.com
:)