www.insite.com.br
Simple XML - Lidando com XML no PHP5 por Anderson de Arruda Casimiro A extensão simpleXML pode ser adionada ao PHP4 e vem habilitada por default no PHP5. Tratar documentos XML com ela é algo relativamente simples. Mostrarei neste artigo um exemplo de como utilizar um arquivo XML para manter a configuração de um sistema, de uma maneira simples.
Bem, este é o arquivo que vamos utilizar... lógico que num ambiente web este arquivo deverá ficar num diretório protegido, mas seu script PHP deve ter acesso ao mesmo. core.xml:
<sys> Mukeka 1.0 Anderson de Arruda Casimiro <email>[email protected] anderson at duodraco dot com :: Mukeka Braba mysql localhost <user>quser <password>quser mukeka
A função simplexml_load_file() tenta ler o arquivo passado no parâmetro. Se quiser passar uma string contendo o XML(algo como "
mukeka") utilize a função simplexml_load_string(). Essas funções retornam um objeto(a tag pai do xml) com vários objetos encadeados(a tags filhas), que por sua vez possuem outros objetos encadeados(as filhas das filhas), e assim por diante. Por exemplo, em nosso caso, para se pegar o valor de name, dentro de sys, dentro de core fazemos assim: sys->name; ?>
Outra função bastante util é a xpath. Se quiséssemos acessar direto o objeto name poderíamos fazer assim: xpath("name");
Comentários -
echo $srch[0]; ?>
Agora a página que efetivamente pegará o XML, o tratará e definirá as variáveis para o sistema: system = $xml->obj("sys"); $this->db = $xml->obj("db"); } public function getSystem($index) { return $this->system[$index]; } public function getDb($index) { return $this->db[$index]; } } class Xml { public $data; function __construct($file) { $this->data = simplexml_load_file($file) or die("Não é um arquivo válido"); } function obj($search) { $obj = $this->data->xpath($search); return get_object_vars($obj[0]); } } ?>
A Classe "Xml" somente possui um método construtor, o qual vai ler o arquivo XML e transformá-lo num objeto e definí-lo como atributo data. O método obj faz buscas usando o método xpath do simplexml. Como parâmetro você pode passar a string com o nome da tag a ser encontrada, o que pode retornar mais de um resultado, que será colocado em um array; você tambgém pode passar uma hierarquia, por exemplo: "/core/sys". O retorno do método obj é um get_object_vars porque para nossa outra classe não precisaremos de objetos, mas sim seus valores; retorno o indice 0(zero) do resultado de $obj porque queremos o primeiro(e único) resultado da busca por "sys". No construtor da classe Core, instanciamos Xml, e chamamos a busca ($xml->obj()) por "sys" e "db" que são as tags que vão fazer nossas definições. Esta classe ainda conta com os métodos getSystem() e getDb(), os quais irão retornar os valores propriamente ditos. Lógico que seria muito mais fácil definir estes atributos direto no script, uma vez que este é muito simples. Agora imagine quão mais facil ficará para tratar outros documentos XML, e usá-los em outros sistemas, e até RSS, para o qual estou preparando uma coluna para breve, junto com as outras funcionalidades do simplexml.
Até breve. PS.: Para maiores esclarecimentos: http://www.php.net/simplexml