如何修复Debian上的Perl libxml的“无法为文件创建文件解析器上下文...”错误?

时间:2009-07-31 13:22:53

标签: perl debian libxml2

当我尝试使用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缓存功能...

1 个答案:

答案 0 :(得分:1)

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

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