PHP, XML

XML com PHP5

Written by Pedro Mendes · 3 min read >

Tratando-se de PHP, existem basicamente três mecanismos para tratarmos com XML : com o Simple API for XML (SAX), o PHP5 Document Object Model (DOM) e a biblioteca SimpleXML. Entendo que já existem diversos sites explicando como utilizar cada uma das três técnicas, mas procurando na web eu não achei nenhum site que liste rápidamente seus ônus e bônus, logo não fiz um passo-a-passo mas sim uma resenha das extensões.

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, onde é 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, por mais que o parsing aconteça por trás dos bastidores e na maioria das vezes nem sequer notemos, ele sempre irá checar 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.”

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 !

Magento em um ambiente distribuído

Pedro Mendes in PHP
  ·   4 min read

Factory Pattern e PHP

Pedro Mendes in PHP
  ·   9 sec read

2 Replies to “XML com PHP5”

  1. Comecei a estudar o trabalho de PHP com XML e este seu artigo caiu como luvas. Obrigado pela postagem.
    Na sua opnião, para tratamentos de pequenos XML vale a pena o DOM?

  2. Sempre que possível use o SimpleXML – é o mais usado pela comunidade, portanto, sempre você encontrará material pela web e pessoas que podem te dar uma força.

    Vlw!
    PM

Deixe um comentário

O seu endereço de e-mail não será publicado.