codigo35.com

XML com PHP5

XML com PHP

No PHP existem três mecanismos para tratarmos com XML: o Simple API for XML (SAX), o PHP5 Document Object Model (DOM) e a biblioteca SimpleXML.

Hoje decidi listar rapidamente os ônus e bônus de cada opção. Vamos lá!

Antes de tudo : entendendo o conceito de parsing de um XML

Todos os mecanismos que trabalham com XML no PHP obrigatoriamente usam o conceito de parsing. Em outras palavras, é feita uma análise da estrutura do documento para então começar desencadear ações para nos permitir trabalhar com o mesmo.

Também conhecida na ciência da computação como Análise Sintática, o parsing acontece por trás dos bastidores e na maioria das vezes nem sequer notemos. Entretanto, é com ele que é checado se o documento fornecido é um documento XML válido. Alguns links interessantes:

W3Schools : Well formated XML
Wikipedia: Valid XML
Wikipedia (PT) – Análise Sintática

PHP SAX

O SAX trabalha sempre com o lançamento de eventos que estouram de acordo com os elementos encontrados no XML – essencialmente sendo esses as tags de abertura e fechamento, mas podendo ser definidos outros padrões.

Para trabalhar com SAX, você basicamente cria um parser para o XML com a função chamada xml_parser_create e depois começa a usar o handler criado sentando suas funções que estourarão de acordo com os elementos encontrados.

Sendo sincero, a idéia até é legal, mas só vale a pena se realmente manipular cada (ou a maioria) dos elementos do seu XML. O próprio Andi Gutmans confessa que dá muito trabalho usar o SAX.

Quanto ao seu desempenho, é satisfatório para aplicações online de grande porte. Dizem os evangelistas do PHP5 que nesta última versão do PHP o SAX teve um improvement de desempenho devido a troca do mecanismo de base para rotinas com XML, que antigamente era uma toolkit em C chamada Expat e agora é a criada pela galera do Gnome, a chamada libxml2. Eu não vi nenhum benchmark na web falando sobre isso.

Links interessantes sobre SAX:

PHP.NET – XML parser options
InformIT – SAX and PHP

PHP DOM

Já o PHP DOM, por sua vez, veio com o PHP trazendo algumas facilidades. O Zend PHP 5 Certification Study Guide chega a dizer que ele foi totalmente reescrito. Mas fique atento: o próprio Andi Gutmans no livro PHP 5 Power Programing canta a pedra de que a extensão DOM come memória feito um cão. Ele diz na p. 147 :

“Usar o método DOM é muito mais fácil ( em relação ao Sax – simple API for XML), mas paga-se um preço – uso de memória. Embora isso não seja perceptível em um pequeno exemplo, definitivamente é perceptível quando você faz o parsing de um arquivo XML de 20mb com o método DOM. Ao invés de iniciar eventos para cada elemento de arquivo XML, o DOM cria um árvore na memória contendo o seu arquivo XML.”

PHP 5 Power Programing

Por isso fique atento quando utilizar o DOM, pois se você carregar um XML robusto para cada usuário que se loga no seu site, por exemplo, você poderá ter um sério problema. Ainda sim o DOM parece ser a técnica mas completa para fazer o parsing do seu documento XML.

Quando você tem a extensão DOM já compilada com seu PHP, basta você instanciar a classe DomDocument – que já vem junto com a extensão, e usar o método load() caso tenha que ler um arquivo xml do seu HD. Ele também suporta o uso de XPath (linguagem de consulta para XML).

Por último, destaco também que o DOM e o SimpleXML (próxima técnica) tem uma boa comunicação através dos seus handles, podendo ser feita a conversão de um handle de um tipo para outro com grande facilidade.

Links interessantes sobre DOM:

PHP.NET – Document Object Model
W3Schools – PHP XML DOM

SimpleXML

Por última (e também mais usada) existe a extensão SimpleXML, que oferece uma ampla variedade de opções para operações com XML. Embora tenha algumas limitações, na maioria dos casos a SimpleXML é a mais indicada – devido sua simplicidade e bom desempenho.

Ler, comparar e substituir nós e retirar textos de um XML com o SimpleXML é rápido e indolor, ao contrário das duas últimas extensões.

Nas primeiras subversões do PHP5, o SimpleXML não tinha o recurso de escrita de um XML, somente leitura e busca. Mas essa limitação já foi sanada embora outra limitação ainda exista: a de remoção de atributos de um nó.

Ou você retira o nó e insere outro já sem o atributo desejado, ou você exporta seu handler do SimpleXML para o DOM, retira o atributo e retorna para o SimpleXML.

Links interessantes sobre o SimpleXML:

PHP.NET – SimpleXML
W3Schools – PHP SimpleXML
O’Reilly On Lamp – Using PHP5 SimpleXML

Dei essa pincelada nas formas mais comuns de lidar com XML no PHP mas saiba que existem outras formas menos convencionais – e bem mais rústicas, como fazer o parser de um XML com expressões regulares. Vamos ver o que o PHP6 pode vir a acrescentar sobre esse aspecto. Vlw !

Exit mobile version