Здраствуйте, скрипт должен брать данные из XML и записывать в mysql:
Код XML<?xml version="1.0"?>
<dataset>
<dataset>
<mailbox>
<username>bion</username>
<name>ТОВ Бион</name>
<active>0</active>
</mailbox>
<mailbox>
<username>romeo</username>
<name>Жених Джульеты</name>
<active>1</active>
</mailbox>
<mailbox>
<username>kamaz</username>
<name>Russian car</name>
<active>1</active>
</mailbox>
</dataset>
Таблица MYSQL:username name active
bion Бион 1
kamaz Russian car 1
romeo Romeo 1
#!/usr/bin/perl -w
use strict;
use DBI;
use XML::XPath;
#Параметры подключения к базе
my $db_host="";
my $db_name="";
my $db_user="";
my $db_pass="";
#Подключение к базе данных
my $dbh = DBI->connect("dbi:mysql:$db_name:$db_host", "$db_user", "$db_pass") || die $DBI::errstr;
#Говорим что мы будем использовать UTF-8, во избежания проблем с кодировками в DB.
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');
#Функция запроса в MySQL
sub msq{
my $sth = $dbh->prepare("$_[0]");
$sth->execute;
return $sth;
}
#Функция сравнение статус юзера и статус в xml
sub mysqlxml{
my $x=msq ("SELECT active FROM mailbox where `username` = '$_[0]'");
if ( $x->rows == $_[1])
{
return 0;
}
else
{
return 1;
}
}
#Функция апдейта юзеров
sub msql{
my $sth = $dbh->prepare("UPDATE mailbox SET `active` = '$_[0]' WHERE `username` = '$_[1]'");
$sth->execute;
return $sth;
}
my $xp = XML::XPath->new(filename => 'mail.xml');
my $nodes="/dataset/mailbox";
# Цикл поиска и записи
foreach my $row ($xp->findnodes("$nodes")) {
# Извлечение данный из XML
my $email = $row->find('username')->string_value;
my $active = $row->find('active')->string_value;
my $username = "$email\@dot.com";
if (mysqlxml($username, $active) == 1)
{
print "$username - change status on $active\n";
msql ($active, $username);
}
else
{
printf "$username - no changes\n";
#printf "$username - already exists\n";
}
}
$dbh->disconnect;
Вот если в XML <active>1</active> а в базе 0 то нечего не меняется, а если на оборот то меняет значение на 0.
Где я не доделал?
Что б в всех случаях записывало те данные что и в XML
Все, пофиксил.