2011-01-31 58 views
7

Solo me pregunto si alguien puede indicarme algunos consejos/un script que me ayudará a crear un XML a partir de un archivo CSV original, utilizando PHP.PHP Script para convertir archivos .CSV a .XML

Saludos

+5

Puedo. '* apuntando en la dirección general de google con la solicitud de" conversión .CSV a .XML "*' –

+0

Sí, el "software" que lo hace es realmente útil "Ojos en blanco" – StuBlackett

+1

'Solo googlealo' Bueno, si era tan fácil don ¿Crees que Stu ya lo habría hecho? – SC1988

Respuesta

15

Esto es bastante fácil de hacer, basta con mirar fgetcsv para leer archivos csv y luego DomDocument para escribir un archivo xml. Esta versión usa los encabezados del archivo como las claves del documento xml.

<?php 
error_reporting(E_ALL | E_STRICT); 
ini_set('display_errors', true); 
ini_set('auto_detect_line_endings', true); 

$inputFilename = 'input.csv'; 
$outputFilename = 'output.xml'; 

// Open csv to read 
$inputFile = fopen($inputFilename, 'rt'); 

// Get the headers of the file 
$headers = fgetcsv($inputFile); 

// Create a new dom document with pretty formatting 
$doc = new DomDocument(); 
$doc->formatOutput = true; 

// Add a root node to the document 
$root = $doc->createElement('rows'); 
$root = $doc->appendChild($root); 

// Loop through each row creating a <row> node with the correct data 
while (($row = fgetcsv($inputFile)) !== FALSE) 
{ 
    $container = $doc->createElement('row'); 
    foreach($headers as $i => $header) 
    { 
     $child = $doc->createElement($header); 
     $child = $container->appendChild($child); 
     $value = $doc->createTextNode($row[$i]); 
     $value = $child->appendChild($value); 
    } 

    $root->appendChild($container); 
} 

$strxml = $doc->saveXML(); 
$handle = fopen($outputFilename, "w"); 
fwrite($handle, $strxml); 
fclose($handle); 
+0

Hola Michael Sé que esta es una publicación anterior, pero espero que te des cuenta. ¿Cómo puedo anidar esta misma función dentro de sí misma? Lo que tengo es un cliente que quiere XML> CSV> XML> CSV (conversión entre los dos) para su sistema de inventario. Los artículos pedidos por sus clientes se almacenan como tales cuando se convierten de XML a CSV: nombre_ejemplo | item_price | item_quantity Lo que hago es hacer que CSV> XML cree una temp csv para almacenar esta información. Todo lo que quiero hacer es exactamente lo que hace este script, de nuevo, con ese archivo temporal. Pero por alguna razón, sigue tratando de repetir más de lo que debería. Por favor píqueme si puede – SC1988

5

There are a number of sites out there that will do it for you.

Si esto va a ser un proceso ordinario en lugar de una cosa de una sola vez puede ser ideal para simplemente analizar el CSV y la salida XML a sí mismo:

$csv = file("path/to/csv.csv"); 

foreach($csv as $line) 
{ 
    $data = explode(",", $line); 
    echo "<xmltag>".$data[0]."</xmltag>"; 
    //etc... 
} 

Mirar hacia arriba file y string funciones de PHP.

+0

Cheers Ben. Una respuesta útil !! Echaré un vistazo. He estado mirando fgetcsv en el sitio PHP.net también. – StuBlackett

6

El código proporcionado anteriormente crea un documento XML, pero no lo almacena en ningún dispositivo físico. Así que reemplace echo $doc->saveXML(); con

$strxml = $doc->saveXML(); 
$handle = fopen($outputFilename, "w"); 
fwrite($handle, $strxml); 
fclose($handle);