Você está na página 1de 3

Manipulando XML com SimpleXML no PHP Postada em: 10/09/2009 Por: Rogrio Almeida N de Visualizaes: 12411. Compatvel: FF 3.

x IE 5.5 IE 6 IE 7 IE 8 PHP 5 SimpleXML fornece um conjunto de ferramentas, que torna as tarefas de carregar, ler e alterar documentos XML, muito simples e fcil. A extenso SimpleXML requer PHP 5 ou superior e habilitada por padro. Para desativar a extenso, utilize --disable -simplexml nas opes de configurao. Nesse primeiro exemplo, criaremos um document XML e l-lo utilizando simplexml_loa d_file() que converte um arquivo XML em um objeto. O valor de retorno de simplexml_load_file() um objeto da classe SimpleXMLElement que representa os elementos do documento XML. Quando houver erro, ir retornar FA LSE. Uma frequente causa de erro a incorreta formatao do documento XML. Vamos agor a criar nosso documento XML: <?xml version="1.0" encoding="ISO-8859-1"?> <regiao> <sudeste> <descricao>Sudeste possui 4 estados: Rio de Janeiro, Sao Paulo, Espirito S anto e Minas Gerais</descricao> <estados> <estado> <nome>Rio de Janeiro</nome> <capital>Rio de Janeiro</capital> </estado> <estado> <nome>Sao Paulo</nome> <capital>Sao Paulo</capital> </estado> <estado> <nome>Minas Gerais</nome> <capital>Belo Horizonte</capital> </estado> <estado> <nome>Espirito Santo</nome> <capital>Vitoria</capital> </estado> </estados> <times-regiao> <times>Flamengo, Botafogo, Fluminense, Vasco, Sao Paulo, Corinthians, P almeiras e Santos</times> </times-regiao> <quant_times type="numero">8</quant_times> <quant_times type="jogadores">11</quant_times> </sudeste> </regiao> Vamos ler o documento XML acima e verificar se no houve erros: //L o documento XML //Uma frequente causa de erros, a incorreta formatao do documento XML if( file_exists('exemplo1.xml') ) {

$xml = simplexml_load_file('exemplo1.xml'); //Vamos exibir as informaes do objeto, utilizando var_dump que retorna uma r epresentao estruturada, incluindo tipo e valor var_dump($xml); } Podemos tambm ver os ns filhos de um determinado n, utilizando children(). Abaixo, exemplo dos filhos do n <sudeste> do documento XML: foreach( $xml->sudeste->children() as $elemento => $valor ) { echo "<br />$elemento -> $valor"; } Utilizaremos agora as propriedades do objeto simpleXMLElement, para ler o docume nto XML. No prximo exemplo, pegamos a descrio dos estados da regio sudeste, string e ntre as tags <descricao> e </descricao> do documento XML: echo "<p>Descrio dos estados: " . $xml->sudeste->descricao . "<p>"; Para acessar os times da regio sudeste, elemento <times> que est dentro de <timesregiao> do documento XML, que contm caracter no permitido como o hfen pela conveno de nomes do PHP, encapsulamos o elemento <times-regiao> com chaves e apstrofos. echo $xml->sudeste->{"times-regiao"}->times; Aqui, pegamos o atributo como elemento de ndice (type) para que possamos verifica r quantos times h e nmero de jogadores. foreach ($xml->sudeste->quant_times as $quant_times) { switch((string) $quant_times["type"]) { case "numero": echo "<p>".$quant_times, " times."; break; case "jogadores": echo "<br />".$quant_times, " jogadores em cada time"; break; } } Agora modificaremos nosso documento XML, fazendo algumas alteraes e adicionando ns. Primeiramente, alterando o nome das capitais dos estados de So Paulo e Espirito Santo: $xml->sudeste->estados->estado[1]->capital = "Campinas"; $xml->sudeste->estados->estado[3]->capital = "Guarapari"; Para adicionar um elemento filho a um n XML, usamos addChild(). O exemplo abaixo, adiciona o elemento <descricao> dentro do n <sul> ao documento XML:

$sul = $xml->addChild("sul"); $sul->addChild("descricao","Regiao Sul possui varios times: Gremio, Internaciona l, Avai, Parana, Atletico-PR, Figueirense..."); Para verificar as alteraes, vamos exibir o documento XML com asXML(), que retorna uma string XML. Perceba que as capitais do Espirito Santo e de So Paulo mudaram e que houve a incluso de ns. echo $xml->asXML(); Se voc desejar que as alteraes realizadas at agora, sejam gravadas no arquivo, utili zamos file_put_contents. Muito cuidado ao utilizar file_put_contents, pois o con tedo original ser sobrescrito. file_put_contents("exemplo1.xml",$xml->asXML()); Para download dos scripts utilizados nesta matria: xml_com_simpleXml.zip Espero que essa matria tenha ajudado voc a conhecer um pouco mais da extenso Simple XML. Em breve, colocarei mais matrias abordando outros assuntos interessantes.