2011-01-31 6 views
7

Je me demande simplement si quelqu'un peut me diriger vers quelques conseils/un script qui m'aidera à créer un fichier XML à partir d'un fichier CSV original, en utilisant PHP.PHP Script pour convertir les fichiers .CSV en .XML

Vive

+5

Je peux. '* pointant dans la direction générale google avec" convertir .CSV en .XML "demande *' –

+0

Ouais le "logiciel" qui le fait est vraiment pratique "Roll Eyes" – StuBlackett

+1

'Just google' Eh bien gee si c'était aussi facile que don Tu ne penses pas que Stu l'aurait déjà fait? – SC1988

Répondre

15

Ceci est assez facile à faire, il suffit de regarder fgetcsv pour lire les fichiers CSV, puis DomDocument pour écrire un fichier XML. Cette version utilise les en-têtes du fichier en tant que clés du document 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

Bonjour Michael Je sais que c'est un vieux post mais j'espère que vous le remarquerez. Comment puis-je imbriquer cette même fonction en elle-même? Ce que j'ai, c'est un client qui veut XML> CSV> XML> CSV (conversion entre les deux) pour son système d'inventaire. Les articles que leurs clients commandent sont stockés en tant que tels lors de la conversion de XML en CSV: item_name | item_price | item_quantity Ce que je fais c'est que CSV> XML crée un csv temporaire pour stocker cette information. Tout ce que je veux faire est exactement ce que fait ce script, encore une fois, avec ce fichier temporaire. Mais pour une raison quelconque, il continue d'essayer de boucler plus qu'il ne le devrait. S'il vous plaît PM moi si vous le pouvez – SC1988

5

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

Si cela va être un processus régulier plutôt qu'une chose une seule fois, il peut être idéal pour analyser tout le CSV et la sortie XML vous:

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

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

Levez les yeux vers les fonctions PHP file et string.

+0

À la vôtre Ben. Une réponse utile !! Je vais jeter un coup d'œil. Vous avez regardé fgetcsv sur le site PHP.net aussi. – StuBlackett

6

Le code donné ci-dessus crée un document XML, mais ne stocke pas sur un appareil physique. Remplacez donc echo $doc->saveXML(); par

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