The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"XML, Perl"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"XML, Perl"  +/
Сообщение от drake0103 (ok) on 29-Мрт-13, 10:56 
Здраствуйте, скрипт должен брать данные из 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

Ответить | Правка | Cообщить модератору

Оглавление

  • XML, Perl, drake0103, 17:57 , 29-Мрт-13, (1)  

Сообщения по теме [Сортировка по времени | RSS]


1. "XML, Perl"  +/
Сообщение от drake0103 email(ok) on 29-Мрт-13, 17:57 

Все, пофиксил.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру