May 28
Atendendo a solicitação de um visitante do blog criei este tutorial com os princípios básicos para converter um arquivo XML em CSV.
Crie um arquivo com o nome produtos.xml e insira o código abaixo.
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <catalogo> <produto id='p1'> <nome>Caderno</nome> <preco>2,00</preco> <quantidade>100</quantidade> </produto> <produto id='p2'> <nome>Caneta</nome> <preco>1,00</preco> <quantidade>200</quantidade> </produto> <produto id='p3'> <nome>Lapis</nome> <preco>0,50</preco> <quantidade>50</quantidade> </produto> <produto id='p4'> <nome>Livro Matematica</nome> <preco>11,00</preco> <quantidade>10</quantidade> </produto> <produto id='p5'> <nome>Apontador</nome> <preco>1,00</preco> <quantidade>20</quantidade> </produto> </catalogo>
É necessário criar um diretório com o nome csv e dar permissão de leitura e escrita antes de executar o código.
Crie um arquivo com nome xml2csv.php e coloque o código abaixo.
<?php
$doc = new DomDocument;
// Carrega o arquivo XML com um arquivo DOMDocument
$doc->Load('produtos.xml');
// Defino o nome do elemento pai (root).
$root = $doc->getElementsByTagName('produto');
// Defino o nome dos elementos filhos no arquivo XML que eu desejo.
$children = array('nome','preco','quantidade');
$cvs = NULL;
// Crio o cabeçalho do arquivo CSV com o nome de todos os campos.
$cvs .= "codigo,nome,preco,quantidade";
// Quebra de linha do arquivo CSV.
$cvs .= "\n";
// Faço um loop para pegar todos os elementos pai (root) encontrados.
for ($i=0; $i < $root->length; $i++) {
// Pega o valor do atributo do elemento pai (root).
$id = $root->item($i)->getAttribute('id');
// Irei dar um escape em todos os valores usando aspas duplas.
$cvs .= '"' . $id . '",';
// Busca por elementos filhos (child) definidos no array
$valor = array();
foreach ($children as $child) {
$valor[] = '"' . $root->item($i)->getElementsByTagName($child)->item(0)->nodeValue . '"';
}
// Uso o implode para criar uma string com os valores separados por vírgula.
$cvs .= implode(',', $valor);
// Quebra de linha do arquivo CSV.
$cvs .="\n";
}
// getcwd() retorna o diretório atual.
$caminho = getcwd(). '/csv/';
$data = date('d_m_y_H_i_s');
$file_path = $caminho.$data.'_lista.csv';
// Verifique se vc tem permissão de leitura e escrita neste diretorio
if(fwrite($file=fopen($file_path,'w+'),$cvs)) {
fclose($file);
echo "Arquivo gravado com sucesso!";
} else {
echo "Erro ao abrir arquivo!";
}
?>
Caso tenha alguma duvida deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.

Comentários Recentes