Caminho de Navegação Xml e rss / Scripts / Manipulando XML com SimpleXML no PHP

1 avaliação
Indique ao Ueba Indique ao BlogBlogs Indique ao Delicious Indique ao Technorati Indique ao Google Bookmarks Indique ao Newsgator
TAGS
  • Máximo de 100 tags
  • Cada tag deve ter até 20 caracteres.
  • Separar as tags com virgula. Ex.: php, sql, html, xml, fireworks
COMENTAR

INDICAR
Nome do amigo: E-mail do amigo: Comentário:
REPORTAR ERRO Descreva o erro:

Manipulando XML com SimpleXML no PHPPostada em: 10/09/2009

Rogério Almeida
Por: Rogério Almeida Nº de Visualizações: 1149. Compatível: 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 fácil. A extensão SimpleXML requer PHP 5 ou superior e é habilitada por padrão. Para desativar a extensão, utilize --disable-simplexml nas opções de configuração.

Nesse primeiro exemplo, criaremos um document XML e lê-lo utilizando simplexml_load_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 FALSE. Uma frequente causa de erro é a incorreta formatação do documento XML. Vamos agora 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 Santo 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, Palmeiras 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 não houve erros:


   //Lê o documento XML
   //Uma frequente causa de erros, é a incorreta formatação do documento XML
   if( file_exists('exemplo1.xml') ) {
      $xml = simplexml_load_file('exemplo1.xml');
      //Vamos exibir as informações do objeto, utilizando var_dump que retorna uma representação estruturada, incluindo tipo e valor
      var_dump($xml);
   }
 

Podemos também ver os nós 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 documento XML. No próximo exemplo, pegamos a descrição dos estados da região sudeste, string entre as tags <descricao> e </descricao> do documento XML:


   echo "<p>Descrição dos estados: " . $xml->sudeste->descricao . "<p>";
 

Para acessar os times da região sudeste, elemento <times> que está dentro de <times-regiao> do documento XML, que contêm caracter não permitido como o hífen pela convenção de nomes do PHP, encapsulamos o elemento <times-regiao> com chaves e apóstrofos.


   echo $xml->sudeste->{"times-regiao"}->times;
 

Aqui, pegamos o atributo como elemento de índice (type) para que possamos verificar quantos times há e número 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 alterações e adicionando nós. Primeiramente, alterando o nome das capitais dos estados de São 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, Internacional, Avai, Parana, Atletico-PR, Figueirense...");
 

Para verificar as alterações, vamos exibir o documento XML com asXML(), que retorna uma string XML. Perceba que as capitais do Espirito Santo e de São Paulo mudaram e que houve a inclusão de nós.


echo $xml->asXML();
 

Se você desejar que as alterações realizadas até agora, sejam gravadas no arquivo, utilizamos file_put_contents. Muito cuidado ao utilizar file_put_contents, pois o conteúdo original será sobrescrito.


file_put_contents("exemplo1.xml",$xml->asXML());
 

Para download dos scripts utilizados nesta matéria:
xml_com_simpleXml.zip
Espero que essa matéria tenha ajudado você a conhecer um pouco mais da extensão SimpleXML. Em breve, colocarei mais matérias abordando outros assuntos interessantes.

Até a próxima!
Rogério Almeida