Simple XML

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:


<?xml version="1.0"?>
<core>
<sys>
<name>Mukeka</name>
<version>1.0</version>
<author>Anderson de Arruda Casimiro</author>
<email>anderson@duodraco.com</email>
<fakeemail>anderson at duodraco dot com</fakeemail>
<title>:: Mukeka Braba</title>
</sys>
<db>
<type>mysql</type>
<host>localhost</host>
<user>quser</user>
<password>quser</password>
<database>mukeka</database>
</db>
</core>

A função simplexml_load_file() tenta ler o arquivo passado no parâmetro. Se quiser passar uma string contendo o XML(algo como “<core><title>mukeka</title></core>”) 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:


<?php
$obj
= simplexml_load_file("core.xml");
echo
$obj->sys->name;
?>

Outra função bastante util é a xpath. Se quiséssemos acessar direto o objeto name poderíamos fazer assim:


<?php
$obj
= simplexml_load_file("core.xml");
$srch = $obj->xpath("name");
echo
$srch[0];
?>

Agora a página que efetivamente pegará o XML, o tratará e definirá as variáveis para o sistema:


<?php
class Core
{
private $system = array();
private $db = array();
function __construct()
{
$xml = new Xml(“core.xml”);
$this->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

Fonte: http://www.phpbrasil.com/articles/article.php/id/1009



Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s