Ошибка XML при добавлении записи в Календарь Google с помощью Perl - PullRequest
0 голосов
/ 21 февраля 2012

Имея массив с датами и именами, я хочу добавить события в календарь Google со следующей подпрограммой:

use Net::Google::Calendar;
use Date::Manip;
use Date::Calc qw(Add_Delta_Days);
my $username #removed for stackoverflow
my $password #removed for stackoverflow
my $cal = Net::Google::Calendar->new;
my $from = new Date::Manip::Date;
my $to = new Date::Manip::Date;
my @f;
my @t;
my $year;
my $month;
my $day;
$cal->login($username, $password) or $MESSAGERED = "Google Calendar login failed.";
my $entry;

#[0] name
#[1] from
#[2] to
#[3] hid
for my $i (0 .. $#ALL_HOLIDAYS) { 
    $from->parse($ALL_HOLIDAYS[$i][1]);
    $to->parse($ALL_HOLIDAYS[$i][2]);

    @f = $from->value();
    @t = $to->value(); 

    # a day added in line with our "last day of absence"
    ($year, $month, $day) = Add_Delta_Days($t[0], $t[1], $t[2], 1); 
    $entry = Net::Google::Calendar::Entry->new() or die " 518 ++++++++++ ";
    $entry->when(DateTime->new(year => $f[0], month => $f[1], day => $f[2]), DateTime->new(year => $year, month => $month, day => $day)) or die " 519 ++++++++++ ";
    $entry->title($ALL_HOLIDAYS[$i][0]) or die " 520 ++++++++++ ";
    $entry->content("Holiday") or die " 521 ++++++++++ ";
    $entry->transparency('transparent') or die " 522++++++++++ ";
    $entry->status('confirmed') or die " 523 ++++++++++ ";

    if ($cal->add_entry($entry)) {
        &mark_entry_as_googd($ALL_HOLIDAYS[$i][3]);
    }  else {
        $MESSAGEORANGE = "Unable to submit entry for ".$ALL_HOLIDAYS[$i][0]
    }
}
$MESSAGEGREEN = "Google Calendar populated";
print $MESSAGERED.$MESSAGEGREEN.$MESSAGEORANGE;

Дело в том, как только я снимаю этот скрипт и запускаю его в своей консоли (osx) все работает нормально, события добавляются в гугл календарь.Если он выполняет на сервере debian следующую ошибку, причина, по которой я задаю этот вопрос, получена:

No namespace matches prefix: xmlns at /usr/local/share/perl/5.10.1/XML/XPath/Node/Element.pm line 261.

CPAN сообщает об одном и том же на обеих машинах, что оба Net:: Google :: Календарь и его зависимости установлены.Ни одна из этих die тоже не работает, это всегда та же самая ошибка.Я понимаю, что этот модуль альфа, но все же, почему расхождение?

1 Ответ

1 голос
/ 21 февраля 2012

Я предполагаю, что модуль Google не устанавливает правильное пространство имен для записи в ответе xml.Он возвращается к пространству имен по умолчанию (ничего).Записи могут выглядеть как без установки пространства имен на somename, приложение не может получить эти данные.По умолчанию используется значение «xmls», поэтому пространство имен по умолчанию ищет теги типа и не может их найти.(Пространство имен по умолчанию может быть разным в каждой установке - проверьте версии xmlib, насколько я помню, недавно было изменено значение по умолчанию на 'xmlns', чтобы принудительно использовать пространство имен).

Без просмотра ответа xml трудноответь правильно.Есть ли способ, которым вы можете захватить или сбросить ответ на файл.Как только вы увидите заголовок, вы увидите, где проблема.Если xml-ответ правильный, модуль не устанавливает пространство имен, что может привести к ошибке на их конце.

Пример пространств имен с xmlns

...