sábado, 27 de julho de 2013

Manipulando arquivos XML com PHP - 2/2

Olá Pessoal.
Aprenderemos um pouco sobre a manipulação de arquivos XML com PHP.
Veremos neste 2º passo sobre a leitura deste tipo de arquivo.
Nossos exemplos serão baseados na biblioteca SimpleXML


NOSSO EXEMPLO DE XML SERÁ O ARQUIVO GERADO NO POST ANTERIOR

# 1. INICIALMENTE VEREMOS UM PEQUENO EXEMPLO DE LEITURA XML COM PHP

exemplo1.xml

<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
    <livro nome="PHP & JQuery">
        <descricao>
            Este livro trata da integração entre duas linguagens

            distintas, mas que juntas podem oferecer muitos recursos
            para aplicações web...
        </descricao>
    </livro>
</biblioteca> 

 
<?php


# ESTA FORMA CARREGA O ARQUIVO EM UMA VARIÁVEL POR UM METODO DA SIMPLEXML
    $xml = simplexml_load_file('diretorio/exemplo1.xml');

    foreach ($xml -> livro as $livro)
    {
        print "<p>" . utf8_decode(
$livro -> attributes()-> nome ."<br>". $livro -> descricao) . "</p><hr/>";
    }
# 2. OUTRA FORMA É CARREGAR O CONTEÚDO DO ARQUIVO PELA FUNÇÃO NATIVA DO
# PHP EM UMA VARIÁVEL E DEPOIS UTILIZAR ESTE CONTEÚDO COMO UM ARQUIVO XML
# COMO NO 1º EXEMPLO DE GERAÇÃO DE ARQUIVOS, NO POST ANTERIOR

   $arquivo = file_get_contents('diretorio/exemplo1.xml');

   $xml = new SimpleXMLElement($
arquivo);

   foreach($xml as $livro)
   {
      $nome =
utf8_decode($livro -> attributes()-> nome);
      $descricao = utf8_decode($livro -> descricao);
      
      print "<h3>" . $nome . "<br/>" . $descricao . "</h3>";
   }


 # 3. AGORA VEREMOS A LEITURA E GRAVAÇÃO DAS INFORMAÇÕES NO BANCO DE DADOS
  $agora = date("Y-m-d H:i:s");
  $host     = 'localhost';
  $usuario  = 'root';
  $senha    = 'secreta';
  $db       = 'db_exemplos';
  $sql      = 'INSERT INTO tb_biblioteca (nome, descricao) VALUES ';
    $conexao = new mysqli($host, $usuario, $senha, $db);

# PARA NÃO TERMOS PROBLEMAS COM CHARSETS E ENCODES UTF-8 x ISO-8859-1 
APLICAMOS ALGUMAS CONFIGURAÇÕES AO NOSSO BANCO
  $conexao -> query("SET NAMES 'utf8'");
  $
conexao -> query("SET character_set_connection='utf8'");
  $
conexao -> query("SET character_set_client='utf8'");
  $
conexao -> query("SET character_set_results='utf8'");

  $xml = simplexml_load_file('diretorio/exemplo1.xml');

  foreach ($xml -> livro as $livro)
  {

     $nome = $conexao -> real_escape_string($livro -> attributes() -> nome);
     $descricao = $conexao -> real_escape_string($livro -> descricao);
     
     $sql .= "('"$nome ."', '"$descricao) . "'),";
  }

  

  # RETIRAMOS A ULTIMA ',' E SUBSTITUÍMOS POR UM ';'
  $sql = substr($sql,0,-1).";";
  
  $conexao -> query($sql);

  

# AGORA IMAGINEMOS QUE TIVÉSSEMOS QUE TRABALHAR COM DADOS VINDOS DE UMA PLANILHA DO MS EXCEL, OU SEJA, ESTA PLANILHA FOSSE SALVA COMO XML.

 $arquivo = 'diretorio/exemplo1.xml';

 $sql = "";

 if($xml = simplexml_load_file($arquivo))
 {       
    # 1 - PERCORRO A PLANILHA
    foreach($xml -> Worksheet as $planilha)
    {
# RETIRA O CABEÇALHO DA PLANILHA
        unset($planilha -> Table -> Row[0]);

# 2 - PERCORRO A TABELA
foreach($planilha -> Table as $tabela)
{
                # 3 - PERCORRO AS LINHAS
        foreach($tabela -> Row as $linha)
        {
$sql .= "(";

# 4 - PERCORRO AS CELULAS
foreach($linha -> Cell as $celula)
{
            $sql.= $celula->Data != """'".$conexao -> real_escape_string($celula->Data)."', " : "'', ";
}

$sql.= "'".$agora."'),";
      }

     $sql = $sql != """INSERT INTO tb_biblioteca (nome, assunto, tema, descricao, isbn, ano, autor, dt_cadastro)VALUES "substr($sql,0,-1).";";
    }
   }
 }

  # INICIO TRANSACAO *  Não funciona com tabelas não baseadas em transações (como MyISAM ou ISAM).
  $conexao -> autocommit(FALSE);

  if($conexao -> query($sql))
  {
     # CONFIRMA TRANSACAO
  $conexao -> commit();
  }
  else
  { 
     # CANCELA TRANSACAO
     $conexao -> rollback();
  }

  $conexao -> close();
?>

Estes pequenos exemplos de leitura de arquivos xml dão uma pequena mostra do quanto é possível ser feito com os dados obtidos.Podemos fazer atualizações, remoções, entre outras tarefas na Base de Dados. Imaginem, atualizar todos os pagamentos de uma tabela de compras lendo um arquivo de retorno bancário em XML

Nenhum comentário:

Postar um comentário

Palavrões e comentários não agregadores de valores e conhecimentos serão descartados