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スクリプトを実行するには、ファイル名のパラメータが必要です.