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
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>
# 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
# 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';
$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();
}
?>
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