Converter XML para arquivo CSV — XML2CSV

CSV, PHP, XML Comentar >> Marcelo Korjenioski

Aten­dendo a soli­ci­ta­ção de um visi­tante do blog criei este tuto­rial com os prin­cí­pios bási­cos para con­ver­ter 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>

É neces­sá­rio criar um dire­tó­rio com o nome csv e dar per­mis­são de lei­tura e escrita antes de exe­cu­tar o código.

Crie um arquivo com nome xml2csv.php e colo­que 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 comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn



Deixe um comentário

Designed by NattyWP Wordpress Themes.
Images by desEXign.