Publicidade   
 você está aqui: phpbrasil.com    artigos    artigo  
 
:: novos artigos ::

:: recomendado ::

PHP para a World Wide Web

Compre esse livro no Submarino.com.br

:: publicidade ::


:: novos scripts ::

:: elenco phpbrasil ::

Diógenes Sobral
Pontos: 2167

Visite a página de perfil de Anderson de Arruda CasimiroSimple XML - Lidando com XML no PHP5
por Anderson de Arruda Casimiro
Lista de Categorias  |  Contribua um Novo Artigo  |  Entre em Contato Conosco

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.
Vote aqui!
Média de Votos Atual: 5.40
Total de Votos: 10
Nota:   

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


<< Anterior 1 Próxima >>

 
Imprimir  |  Enviar para um Amigo


Comentários de Usuários

Como fazer o php4 falar com o simple xml
publicado por adel - 2005-05-23 16:10:22

Como faço o php4 usar o simple xml?

RE: Como fazer o php4 falar com o simple xml
publicado por Anderson de Arruda Casimiro - 2005-05-23 16:17:25

adel, coloquei esta informação no cabeçalho quando eu ainda estava pesquisando para o artigo e achei uma matéria(me desculpa mas não tenho mais o endereço) falando sobre baixar a extensão e compilá-la junto com o php4. Uns dois dias depois disso fui la de novo e haviam muitos comntários do pessoal falando que nao havia funcionado. Aí já eu não pude mais alterar o cabeçalho deste artigo. Vou falar com o Pessoal daqui do PHPBrasil para alterar...
Se eu descobrir alguma maneira de instalar esta extensão no PHP4 eu posto aqui. ok?

RE: Como fazer o php4 falar com o simple xml
publicado por adel - 2005-05-27 20:57:52

Ok, não esquenta não!

Extrair vars de XML
publicado por Julio Cesar Marques - 2005-06-20 13:58:32

Legal...
mas tenho q ler um xml assim:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<raiz>
<objeto1 tipo="int" valor="inteiro"/>
<objeto2 tipo="flo" valor="ponto"/>
<objeto3 tipo="char" valor="caracter"/>
<objeto4 tipo="strng" valor="texto"/>
</raiz>
E recuperar o nome do objeto, tipo e valor desses parametros...
Exixte um meio???

RE: Extrair vars de XML
publicado por Anderson de Arruda Casimiro - 2005-06-20 16:08:47

suponhamos que o que vc passou seja o arquivo "xml.xml":

<pre>
<?php
$xml = simplexml_load_file("xml.xml");
foreach($xml as $a=>$b){
echo $a."(".$b["tipo"].": ".$b["valor"].")".chr(10);
}
?>
</pre>

Com esse script vc consegue o nome da tag e seus valores...

PHP 5
publicado por Túlio Henrique - 2005-06-26 09:57:42

segundo http://br2.php.net/simplexml_load_file foi criado no php 5.1


RES: simplexml_load_file
publicado por Anderson de Arruda Casimiro - 2005-06-27 08:44:57

segundo o mesmo artigo, o 3º parametro esta disponivel desde php5.1 e/ou Libxml 2.6.0. O referido parametro destina-se a apontar para outra libxml.

Olá Pessoal
publicado por flaviounai - 2005-07-05 18:09:28

Seguinte, nao entendo nada de XML, e preciso pegar uma arquivo arquivo.xml, e jogar o conteúdo dele pra dentro de um arquivo arquivo.php, o XML é o seguite:
<?xml version="1.0" encoding="ISO-8859-1"?>
<CMA>
<QUOTES>
<PAPEL>ALGP BAR</PAPEL>
<DESCRICAO>Algodão Pluma Barreiras BA - R$/@</DESCRICAO>
<ULTIMO>37.37</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>ALGP UNA</PAPEL>
<DESCRICAO>Algodão Pluma Unai MG - R$/@</DESCRICAO>
<ULTIMO>40.67</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>ARRC CRI</PAPEL>
<DESCRICAO>Arroz Sequeiro Cristalina GO - R$/Sc 60kg</DESCRICAO>
<ULTIMO>21.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>ARRC RVE</PAPEL>
<DESCRICAO>Arroz Sequeiro Rio Verde GO - R$/Sc 60kg</DESCRICAO>
<ULTIMO>20.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>BOIG DOU</PAPEL>
<DESCRICAO>Boi Gordo Dourados MS - R$/@</DESCRICAO>
<ULTIMO>51.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>BOIG MGE</PAPEL>
<DESCRICAO>Boi Gordo Minas Gerais - R$/@</DESCRICAO>
<ULTIMO>51.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>CFDUR6 CER</PAPEL>
<DESCRICAO>Café Bica Dura T.6 Cerrado MG - R$/Sc 60kg</DESCRICAO>
<ULTIMO>265.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>CFCON7 COL</PAPEL>
<DESCRICAO>Café Conillon T.7 Colatina ES - R$/Sc 60kg</DESCRICAO>
<ULTIMO>153.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>FEIACE SPO</PAPEL>
<DESCRICAO>Feijão Carioca Extra Novo T.1 SP - R$/Sc 60kg</DESCRICAO>
<ULTIMO>123.50</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>FEIJC UNI</PAPEL>
<DESCRICAO>Feijão Carioca Unaí MG - R$/Sc 60kg</DESCRICAO>
<ULTIMO>85.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>MIL PATRO</PAPEL>
<DESCRICAO>Milho Patrocínio MG - R$/Sc 60kg</DESCRICAO>
<ULTIMO>16.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>MIL UNAI</PAPEL>
<DESCRICAO>Milho Unaí MG - R$/Sc 60kg</DESCRICAO>
<ULTIMO>15.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>SCARCOM MIG</PAPEL>
<DESCRICAO>Suino resfr. carcaça c. Atacado MG - R$/kg</DESCRICAO>
<ULTIMO>4.10</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>SUI MIG</PAPEL>
<DESCRICAO>Suino vivo Interior MG - R$/kg</DESCRICAO>
<ULTIMO>2.27</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>SOJ DOU</PAPEL>
<DESCRICAO>Soja Dourados MS (FOB) - R$/Sc 60kg</DESCRICAO>
<ULTIMO>27.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>SOJ UNA</PAPEL>
<DESCRICAO>Soja Unaí MG (FOB) - R$/Sc 60kg</DESCRICAO>
<ULTIMO>28.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>TRGPH MGA</PAPEL>
<DESCRICAO>Trigo Maringá PR (FOB) - R$/t</DESCRICAO>
<ULTIMO>370.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
<QUOTES>
<PAPEL>TRGPH SAN</PAPEL>
<DESCRICAO>Trigo Santo Angelo RS (FOB) - R$/t</DESCRICAO>
<ULTIMO>320.00</ULTIMO>
<DATA>04/07</DATA>
</QUOTES>
</CMA>

Como faço?
Grato a todos.

Fácil
publicado por zedjalma - 2005-07-08 08:21:59

copia e cola...

Acentos com SimpleXML
publicado por ipreti - 2005-07-11 09:59:37

Como eu faço se tiver acentos no meu arquivo xml!?
quando isso ocorre.. o texto volta zuado pra kramba.. alquem sabe o que pode ser?
obrigado
ivan

RES: Acentos com SimpleXML
publicado por Anderson de Arruda Casimiro - 2005-07-12 09:29:52

O simplexml sempre espera ler, e retorna resultados codificados em UTF-8. o que pode fazer é ao receber os dados do simplexml usar o utf8_decode()... na própria função que lê os dados do xml podemos tratar essas "aberrações".

RES: Acentos com SimpleXML(2)
publicado por Anderson de Arruda Casimiro - 2005-07-15 12:39:37

na classe Xml, podemos aplicar a alteração descrita abaixo para que não hajam esses problemas. A função "array_map(função,array)" retorna um array com os elementos do array, após execução de uma função.

class Xml
{
.
.
.
function obj($search)
{
$obj = $this->data->xpath($search);
$aFinal = array_map(utf8_decode,get_object_vars($obj[0]));
return $aFinal;
}
}

ERRO
publicado por Marcio Cleber Barboza - 2006-07-18 14:26:27

Olá pessoal, tudo bom?

Porque estou com o seguinte erro?

Fatal error: Call to undefined function: simplexml_load_file() in /var/www/html/site/includes-site/classe_xml2.php on line 25

RES: ERRO
publicado por Anderson de Arruda Casimiro - 2006-07-18 16:14:23

Marcio, provavelmente a versão do PHP que estás usando é inferior à 5.0.0.

ERRO
publicado por Marcio Cleber Barboza - 2006-07-18 16:36:23

Saberia me indicar qual função devo utilizar no lugar dessa? Tenho um site hospedado na locaweb e eles me informaram que a versão é 5.0.

Obrigado

duvida
publicado por thesanto - 2007-05-02 13:31:22

Boa tarde ... tenho um XML para configuração de um sistema e gostaria de saber como sobrescrever as informaçoes neles... Exemplo <author>XXXX</author> trocar pelo <author>YYYY</author>.

Obrigado

FIREFOX NÃO RECONHECE O JAVASCRIT
publicado por Antonio Fiumari - 2007-09-03 11:03:47

Prezado Anderson:
O JavaScript abaixo não roda através do navegador Firefox. Será que VC poderia me ajudar alterando algum(s) parâmetros ? Agradeço desde já = Fiumari:
<script language="JavaScript"> var ultimo=-1, dBanner;
function carrega(x) {dBanner=x;Banners()}
function Banners()
{ var MNews = new Array();
MNews[0]= '<iframe " name="_blank" scrolling="no" src="http://www.finet.com.br/google.htm" width="100%" frameborder="0" target="_blank" height="350" BORDER="0"></iframe><a href="http://www.finet.com.br/google.htm" target="_blank"></a>';
MNews[1]= '<iframe " name="_blank" scrolling="no" src="http://www.finet.com.br/google2.htm" width="100%" frameborder="0" target="_blank" height="350" BORDER="0"></iframe><a href="http://www.finet.com.br/google2.htm" target="_blank"></a>'
while((Numero = parseInt(Math.random()*MNews.length))==ultimo);
dBanner.innerHTML=MNews[Numero];
setTimeout("Banners()",15000);
} </script>

Publique os seus Comentários

Nome:
Email:
Título:
Comentário:

NOTA: Cadastre-se no site para poder publicar comentários.

 
webmaster: João Prado Maia   © 2000 - 2005 phpbrasil.com
Gerado em 1.012 segundos