Perlはxmlファイルを分析しcsvデータファイルを生成し、同時にデータベースに書き込む
#!/usr/bin/perl
use XML::Simple;
use Data::Dumper;
use DBI;
use Encode;
use strict;
use encoding "gbk";
# XML
if (open(MYFILE, "$ARGV[0]")) {
# here's what to do if the file opened successfully
print "
\"$ARGV[0]\" : file exist! parse beginning!
";
# EMS
my @ems = split(/\_/,$ARGV[0]);
print "@ems[1]
";
# XML
my $data = XMLin($ARGV[0]);
#print Dumper($data);
#
print "Timestamp = $data->{'timestamp'}
";
my $i = 0;
#
print "appending to csv...
";
while( $data->{'output'}->{'TopoMgr.NEAdditionalInfoType-array'}->{'TopoMgr.NEAdditionalInfoType'}->[$i] )
{
print "\@ record num = $i
";
my $text = "$data->{'output'}->{'TopoMgr.NEAdditionalInfoType-array'}->{'TopoMgr.NEAdditionalInfoType'}->[$i]->{'neName'}
";
print $text;
# FILE
open(APPENDFILE, ">>perlne.dat");
# utf-8 ,
Encode::_utf8_off($text);
print APPENDFILE ($text);
close(APPENDFILE);
# Connect to target DB
#my $dbh=DBI->connect("DBI:mysql:test:192.168.1.14", 'root', 'root');
my $dbh = DBI->connect( 'DBI:Oracle:ora10g','res_col','res_col');
#$dbh->do("SET character_set_client = 'utf-8'");
#$dbh->do("SET character_set_connection = 'utf-8'");
#$dbh->do("SET character_set_results= 'utf-8'");
#$dbh->do("SET names 'gbk'");
#Encode::_utf8_off($nename);
# Insert one row
my $rows = $dbh->do("INSERT INTO neinfo(text) VALUES ('$text')");
$dbh->disconnect();
$i ++;
}
close(MYFILE);
# query
my $dbh = DBI->connect( 'DBI:Oracle:ora10g','res_col','res_col');
my $sqr = $dbh->prepare("SELECT * FROM neinfo");
$sqr->execute();
while ( my @row=$sqr->fetchrow_array() )
{
#print join('\t', @row)."
";
print join(',', @row)."
";
}
$sqr->finish();
$dbh->disconnect();
print 'END...';
}unless (open (MYFILE, "$ARGV[0]")) {
die ("cannot open input file $ARGV[0]
");
close(MYFILE);
}
xmlは以下の通り
<?xml version="1.0" encoding="GBK"?>
<outputlist timestamp="20090917232423">
<output>
<TopoMgr.NEAdditionalInfoType-array>
<TopoMgr.NEAdditionalInfoType>
<neId>134217729</neId>
<neName> 1 [1-1]</neName>
</TopoMgr.NEAdditionalInfoType>
<TopoMgr.NEAdditionalInfoType>
<neId>134217731</neId>
<neName> 2 [1-2]</neName>
</TopoMgr.NEAdditionalInfoType>
</TopoMgr.NEAdditionalInfoType-array>
</output>
</outputlist>
perlスクリプトを実行するには、ファイル名のパラメータが必要です.