0

当我尝试使用XML::Simple读取 XML 文件时,有时会收到以下错误消息:

无法为文件创建文件解析器上下文...

经过一番谷歌搜索,这似乎是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缓存功能...

4

1 回答 1

1

错误是否继续“...没有这样的文件或目录”?如果是这样,那么我认为问题在于(无论出于何种原因)当您到达脚本中的那个点时,无论您传递给什么,其中XML::Simple都没有 xml 文件。长话短说,您正在使用的脚本可能将一个错误的变量(空白?空?)传递给XML::Simple模块阻塞。XML::Simple要调试,请在传递之前对您手头的任何内容添加检查。(请参阅下一段中的具体示例,解释为什么我认为这可能是您的问题。)

几个月前,我遇到了类似的问题Weather::Google。简而言之,天气模块试图在LWP::Simple 没有用户代理的情况下从谷歌获取数据。谷歌开始(显然)拒绝没有用户代理的请求。我不得不通过模块回溯,因为错误似乎来自XML::Simple. 事实上,它是由在LWP::Simple和中所做的事情引起的Weather::Google。或者更确切地说,该错误是由于Weather::Google未检查通过创建的对象中的数据造成的LWP::Simple。在这种情况下,一开始可能很难看出哪里出了问题。

于 2009-07-31T14:06:02.230 回答