Palavra:   

Revista PHP / PHP

Flávia Jobstraibizer

Analista de sistemas, DBA Mysql, PostgreSQL, Oracle, SQLServer e Firebird. Desenvolvedora de sistemas, e administradora de servidores FreeBSD. Conheça o site www.flaviajobs.com.br

Lendo um XML dinâmico com PHP e expressões regulares

Lendo um XML dinâmico com expressões regulares

Você que acompanhou o meu tutorial anterior, sobre como gerar um XML dinâmico, com PHP e Mysql, (se não leu, clique aqui), e agora quer saber como ler o arquivo que você gerou, em outros sistemas, vamos falar sobre isso hoje.
Existem vários métodos para leitura de um XML: biblioteca DOM, SAX parser, expressões regulares.
Eu particularmente, prefiro expressão regular. É mais chato de programar, tem mais detalhezinhos, MAS, não chia tanto em relação à versão do PHP que você está usando.

Partindo do artigo anterior, você tem agora um XML com os nomes, emails e datas de aniversários, certo?
Você pode até ter outro tipo de arquivo XML, com outros dados. O que vamos fazer, em resumo, é ler o conteúdo dos nós do XML, e transformar isso em texto.

No artigo anterior, você tem um XML, encapsulado na variável $xml:
Vamos pegá-la e lê-la para um arquivo de texto. Sugiro que você continue o código abaixo, dentro do código do tutorial anterior. :)

// pegando a variável $xml que contém os dados gerados dinamicamente
$saida = $xml;

// lendo o nó 'aniversariante', que é o bloco com os dados do aniversariante. Este nó, após lido retornará a variável $blocoaniversario preg_match_all( "/\<aniversariante\>(.*?)\<\/aniversariante\>/s", $saida, $blocoaniversario );

// iniciando um loop com os dados dos nós filhos de 'aniversariante' foreach( $blocoaniversario[1] as $bloco ) {

// nó 'nomePessoa' (gera a variável $nome) preg_match_all( "/\<nomePessoa\>(.*?)\<\/nomePessoa\>/", $bloco, $nome );

// nó 'emailPessoa' (gera a variável $email) preg_match_all( "/\<emailPessoa\>(.*?)\<\/emailPessoa\>/",
$bloco, $email );

// nó 'dataAniversario' (gera a variavel $dataaniversario) preg_match_all( "/\<dataAniversario\>(.*?)\<\/dataAniversario\>/",
$bloco, $dataaniversario );

Um pouco sobre o que vimos acima:
Função preg_match_all (http://www.php.net/manual/pt_BR/function.preg-match-all.php):
Esta função é a responsável por procurar itens contidos em uma expressão regular, dentro de um registro.
No nosso caso, por exemplo: Para obter o nome da pessoa, estamos lendo dentro dos nós <nomePessoa></nomePessoa> e trazendo todo o seu conteúdo, através da expressão:

preg_match_all( "/\<nomePessoa\>(.*?)\<\/nomePessoa\>/",  $bloco, $nome ); 


Onde: (.*?)\ significa que quero qualquer tipo de formato, em qualquer quantidade de caracteres dentro deste nó.
Os escapes de barras (/\) antes dos nós, são necessários para que ao ler um XML, não haja confusão entre as barras existentes nos nós (</nomePessoa>).

Os parâmetros informados nesta mesma linha: , $bloco, $nome são nesta ordem: a variável que você está lendo, e o nome de variável gerada com os dados lidos neste nó.
E assim sucessivamente em todos os nós que você quiser ler.
Ou seja, se você tivesse um nó chamado <enderecoAniversariante></enderecoAniversariante>, você teria de montar a linha acima, trazendo sempre de onde você está lendo ($saida) e que variável os resultados vão gerar após a leitura ($nomequalquer).

Para finalizar, vamos formatar os resultados obtidos após a leitura do XML, em um formato HTML padrão, apenas para ser compreendido no navegador.

echo( "Nome do aniversariante:".$nome[1][0]." 
<BR>Email do aniversariante: ".$email[1][0]."
<BR>Data do aniversário: ".$dataaniversario[1][0]."
\n<BR><hr>" ); }


O que você está fazendo na linha acima, é montar uma tela, onde você está trazendo as variáveis de cada nó lido ($nome, $email, $dataaniversario),
e formatando com quebras de linha e linhas horizontais, tornando assim, legível e compreensível o conteúdo resultado.

Para ver o resultado obtido com este tutorial, clique aqui

Em um próximo artigo, vou falar de leitura de XML estático. Aqueles que você tem em um cd, ou dentro de um servidor, e precisa ler. As mudanças são poucas, mas ainda assim, é informação útil e importante.
Dúvidas: fjferr@gmail.com, ou através do formuláriod e contato do meu site: www.flaviajobs.com.br

:)

Opções de Interação

Comentários

Muito bom o tópico
Por: Daniel, 03/04/2007   18:18:17
Estava procurando justamente isso, como pegar as informações de um xml e tratar elas com php.

Daniel Arthaud