当我尝试使用XML::Simple读取XML文件时,有时会收到以下错误消息:
无法为文件创建文件解析器上下文...
经过一些谷歌搜索,它似乎是a problem with libxml-libxml-perl,并且应该在我使用的版本(1.59-2)中修复。
有什么想法吗?
编辑:(代码)
sub Read
{
my ($file, $no_option) = @_;
my %XML_INPUT_OPTIONS = ( KeyAttr => [], ForceArray => 1 );
if ((defined $file) && (-f $file))
{
my @stats = stat($file);
if ((defined $XML_CACHE{$file})
&& ($stats[9] == $XML_CACHE{$file}{modif_time}))
{
return ($XML_CACHE{$file}{xml});
}
else
{
my $xml = eval { XMLin($file,
(defined $no_option ? () : %XML_INPUT_OPTIONS)) };
AAT::Syslog("AAT::XML", "XML_READ_ERROR", $@) if ($@);
$XML_CACHE{$file}{modif_time} = $stats[9];
$XML_CACHE{$file}{xml} = $xml;
return ($xml);
}
}
return (undef);
}
是的,我应该&将使用XML::Simple缓存功能...
答案 0 :(得分:1)
错误是否继续“没有这样的文件或目录......”?如果是这样,那么我认为问题是(无论出于何种原因)当你到达脚本中的那一点时,无论你传递给XML::Simple
的是什么,都没有xml文件。简而言之,您使用的脚本可能会将一个错误的变量(空白?空?)传递给XML::Simple
,此时模块会窒息。要进行调试,请在传递之前添加对XML::Simple
的任何内容的检查。 (有关解释为什么的具体示例,请参阅下一段。我认为这可能是您的问题。)
几个月前,我遇到了与Weather::Google
类似的问题。简而言之,天气模块试图通过LWP::Simple
从Google获取数据而无需用户代理。谷歌开始(显然)在没有用户代理的情况下拒绝请求。我不得不回溯模块,因为错误似乎来自XML::Simple
。事实上,这是由LWP::Simple
和Weather::Google
所做的事情引起的。或者更确切地说,错误是Weather::Google
未检查通过LWP::Simple
创建的对象中的数据的结果。在这样的情况下,一开始可能很难看出出了什么问题以及在哪里。