2012-02-21 62 views
0

谷歌日历条目有使用日期和名字,我想事件添加到谷歌日历下面的子例程的数组:XML错误在添加用Perl

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报告同样的东西在两台机器上,这两个网::谷歌::日历并且它的依赖关系被安装。这些die都没有工作,它总是那样的错误。我意识到这个模块是alpha,但仍然,为什么差异?

回答

1

我的猜测是Google模块没有为xml响应中的条目设置正确的名称空间。它回落到默认名称空间(无)。条目可能看起来像< somename:tag>,但没有将名称空间设置为somename,应用程序无法检索该数据。默认值是'xmls',所以默认命名空间正在寻找像< xmls:tag>这样的标签,并且找不到任何标签。 (每次安装时默认的命名空间可能不同 - 也检查xmlib版本,我记得默认情况下最近更改为'xmlns'来强制命名空间的使用)。

没有看到xml响应,很难正确回答。有没有一种方法可以捕获或转储对文件的响应。一旦你看到标题,你可以看到问题出在哪里。如果xml响应正确,那么模块不会设置命名空间,这将是他们的错误。

Example of namespaces with xmlns

+0

是那是一个领先优势,将检查这些东西,但现在我不认为我有办法捕捉性反应 – Recct 2012-02-22 10:17:08

+0

的xmllib-的xmllib-perl的手动从发行库及的xmllib-perl的更新,这似乎已经解决了现在的问题! – Recct 2012-02-23 15:11:03

+0

这很酷也很好知道。 :) – Rich 2012-02-23 21:39:57