perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 31
Click for quality!




08.02.2012 / 23:00

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragXML zu Mysql
Seitenanfang
hallo,

ich habe vorhendene eine xml datei mit XML::Simple und Data::Dumper ausgegeben.

Ist es mgl. die dumper ausgabe irgendwie gaaaanz einfach in msql zu importieren?

mein vereinfachter ansatz bisher (der wichtige ausschnitt :o)):

use XML::Simple;
use Data::Dumper;

my $catalog = XMLin("test.xml");
print Dumper($catalog);

Datum: 01.11.2007-13:07

Beitragre: XML zu Mysql
Seitenanfang
Probier mal xml2sql (http://xml2sql.sourceforge.net/)

Datum: 02.11.2007-02:13

Beitragre: XML zu Mysql
Seitenanfang
danke für den tip.. ich meinte generell ob ich die dumper ausgabe in mysql importieren kann

Datum: 05.11.2007-03:36

Beitragre: XML zu Mysql
Seitenanfang
Data::Dumper::Dumper() gibt die Datenstruktur so aus dass sie mit eval() wieder eingelesen werden kann, da aber $catalog schon die evaluierte Datenstruktur ist, ist Data::Dumper ueberfluessig.

Das Beispiel in perldoc XML::Simple erklaert die ganze Funktionsweise doch recht gut, hier das XML-Beispiel:

Die XML-Datei 'beispiel.xml'


<config logdir="/var/log/foo/" debugfile="/tmp/foo.debug">
<server name="sahara" osname="solaris" osversion="2.6">
<address>10.0.0.101</address>
<address>10.0.1.101</address>
</server>
<server name="gobi" osname="irix" osversion="6.5">
<address>10.0.0.102</address>
</server>
<server name="kalahari" osname="linux" osversion="2.0.34">
<address>10.0.0.103</address>
<address>10.0.1.103</address>
</server>
</config>

Wenn ich jetzt beispielsweise eine MySQL-Datenbank mit 2 Tabellen habe, eine fuer die IP-Adressen und eine fuer die Server. Dann koennte das Script zum Importieren in etwa so aussehen


#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple qw();
use FindBin;

use MyServerDB;

my $server_db = MyServerDB->connect('dbi:mysql:serverdb', 'user', 'pass');

my $servers_resultset = $server_db->resultset('Servers');

my $config = XML::Simple::XMLin("$FindBin::Bin/beispiel.xml");

foreach my $server_name (keys %{$config->{'server'}}) {
my $server = $config->{'server'}->{$server_name};

my @ip_addresses = ref($server->{'address'}) eq 'ARRAY'
? @{$server->{'address'}}
: $server->{'address'};

my $new_server = $servers_resultset->new({ name => $server_name });

foreach my $ip_address (@ip_addresses) {
$new_server->add_to_ip_addresses($ip_address);
}
}


Das Modul 'MyServerDB' uebernimmt die Aufgabe die Daten in die Datenbank zu schreiben, man muss es selbst erstellt, in diesen Beispiel wuerde das Modul DBIx::Class::Schema als Basisklasse verwenden, fuer jede Datenbanktabelle muessen dann weitere Module erstellt werden, die die Tabellenstruktur beschreiben. Beispiele lassen sich in der Dokumentation von DBIx::Class finden:
http://search.cpan.org/~ash/DBIx-Class/
Die Dokumentation steht am Ende der Seite DBIx::Class::Manual::*

Der Quellcode ist nicht weiter getestet, soll nur die Vorgehensweise skizzieren.

Datum: 05.11.2007-17:07

-






-
-