You are here: Wissensbasis Web>UtilFaqInclude>CSVtoXML (2006-06-29)

Wie generiere ich aus einer CSV-Datei eine XML-Datei?

Inhalt:

Häufig hat man Daten als CSV-Datei vorliegen. Sei es ein Dump einer Datenbank oder ein Export von Excel. Zum Datenaustausch zwischen Unternehmen oder zwischen Abteilungen werden häufig XML-Dateien verlangt. Doch wie bekomme ich jetzt die Daten der CSV-Datei in eine XML-Datei.

Dafür gibt es wieder jede Menge unterschiedliche Wege (typisch Perl: TIMTOWTDI)!

Ich zeige erstmal einen möglichen Weg mit DBI (und DBD::CSV) als Modul für die CSV-Datei und XML::Writer für die Generierung der XML-Datei.

DBI und XML::Writer

#! /usr/bin/perl

use strict;
use warnings;
use DBI;
use XML::Writer;
use IO::File;

my $output = new IO::File(">output.xml"); die $! unless($output);
my $writer = new XML::Writer(OUTPUT => $output);

my $dbh = DBI->connect("DBI:CSV:f_dir=/path/to/dir/with/csv/;csv_sep_char=\\;") or die $DBI::errstr;
$dbh->{'csv_tables'}->{'info'} = { 'file' => 'info2.csv'};

my $sth = $dbh->prepare("SELECT * FROM info");
$sth->execute();

my @names = @{$sth->{NAME}};

$writer->startTag('Entries');

while(my @row = $sth->fetchrow_array()) {

    $writer->startTag('Entry');
    $writer->characters("\n");
    for(0..$#names) {

        next unless($names[$_]);
        $writer->startTag($names[$_]);
        $writer->characters($row[$_]);
        $writer->endTag($names[$_]);
        $writer->characters("\n");

    }
    $writer->endTag('Entry');

}

$writer->endTag('Entries');

$sth->finish();
$dbh->disconnect();

$writer->end();
$output->close();

XML::CSV

Ein Beispiel aus der Doku:

use XML::CSV; 

my $csv_obj = XML::CSV->new();
my @arr_of_headings = qw(header1 header2);


$csv_obj->{column_headings} = \@arr_of_headings;
$csv_obj->parse_doc("in_file.csv"); 
$csv_obj->print_xml("out.xml", {format => " ", file_tag = "xml_file", parent_tag => "record"});

Ergänzungen, Kommentare

Kommentare werden am besten in folgender Form vorgenommen, damit sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff
-- Main.AlexanderBecker - 29 Jun 2006 Code etwas verschönert

UtilFaqSubForm edit

Titel Wie generiere ich aus einer CSV-Datei eine XML-Datei?
Autor ReneeBaecker
Bereich FaqPerlUndXML
Topic revision: r3 - 2006-06-29 - 16:24:12 - AlexanderBecker
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.