quarta-feira, 4 de março de 2009

Trabalhando com arquivos XML no PHP

E aew pessoal.
Esses dias eu criei uma aplicação simples em PHP para ser utilizada em Pocket PC, ou seja, páginas WAP só que envolvendo o PHP como linguagem para acessar os dados de uma base MySQL.
Mas como eu iria dizer ao aplicativo PHP que eu teria que acessar a base do servidor x, y ou z?
Foi ai que eu criei um arquivo XML não só contendo informação da base de dados, mas também outros dados que seriam interessantes quando não houvesse conexão com a rede wireless.

ARQUIVOS XML

O XML trabalha muito parecido com o html em relação a criação, abertura e fechamento de Tags. A diferença é que todo XML é case sensitive. Outra característica parecida com o HTML, é que você pode definir o character code, segundo o padrão W3C.

Um exemplo de um arquivo XML:



Este é um exemplo simples de um arquivo XML, contendo como nódulo pai e seus filhos chamados nome.


CARREGANDO ARQUIVOS XML

Para interpretar um documento XML, utilizamos a função simplexml_load_file(). Esta função realiza a leitura de um documento XML, criando um objeto do tipo SimpleXmlElement. Caso o documento esteja mal formatado, com algum erro de case sensitive ou até mesmo não seja um documento XML, essa função retornará FALSE.

Vamos criar um documento PHP que lerá o arquivo XML do exemplo acima. Vamos chamar o arquivo XML de estados.XML.

< ?
//interpreta o documento XML
$xml = simplexml_load_file('estados.XML');

var_dum($xml);

?>

Obs.: A função var_dump() analisa o objeto resultante.

O resultado será o seguinte:

Object(SimpleXMLElement)#1 (4) {
["nome"]=> string(9) "SAO PAULO"
["nome"]=> string(14) "RIO DE JANEIRO"
["nome"]=> string(17) "RIO GRANDE DO SUL"
["nome"]=> string(4) "ACRE"
}


Você pode pegar os dados de um arquivo xml pelos índices de seus nodes. Exemplo:

< ? //interpreta o documento XML
$xml = simplexml_load_file('estados.XML');

echo "Estado: ' . $xml->estados->nome[0] . "\n";
echo "Estado: ' . $xml->estados->nome[1]. "\n";
echo "Estado: ' . $xml->estados->nome[2]. "\n";
echo "Estado: ' . $xml->estados->nome[3];
?>


Você também pode mudar o valor de um node, como no exemplo a seguir:

< ? //interpreta o documento XML
$xml = simplexml_load_file('estados.XML');

//Modificando o valor do primeiro estado e mostrando a seguir
$xml->estados-nome[0] = "MATO GROSSO DO SUL";
echo "Estado: ' . $xml->estados-nome[0];

?>


Você pode utilizar a função foreach para mostrar todos os subelementos nome do documento:

< ? //interpreta o documento XML
$xml = simplexml_load_file('estados.XML');

foreach($xml->estados->nome as $estado){
echo $estado . "\n";
}
?>


FUNÇÕES NATIVAS DO PHP5 PARA MANUSEIO DE ARQUIVOS XML

Existem algumas funções que auxiliam no uso do XML, como incluir novo node, Listar atributos, visualizacão de nodes filhos, gravar dados em um novo arquivo XML, e muitos outros.

Para visualizar e aprender essas funções, nada melhor que o bom e velho PHP.net (www.php.net) que na minha opinião, é o melhor manual/tutorial para linguagem de programação feito até hoje.
Segue abaixo algumas funções que sempre costumo usar:

asXML() - Retorna uma string XML formatada representando o objeto, bem como seus subelementos.
addChild() - Adiciona um novo elemento ao node especificado.
file_put_contents - Sobrepõe um arquivo XML com novos dados.

Qualquer dúvida, é só potar um comentário...
Abraços.