Как можно исправить ошибку «Не удалось создать контекст синтаксического анализатора для файла ...» с помощью Perl libxml в Debian? - PullRequest
0 голосов
/ 31 июля 2009

Когда я пытаюсь прочитать файл XML с помощью XML :: Simple , иногда я получаю это сообщение об ошибке:

Не удалось создать контекст синтаксического анализатора для файла ...

После некоторого поиска в Google, похоже, проблема с 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 Ответ

1 голос
/ 31 июля 2009

Ошибка продолжает "Нет такого файла или каталога в ..."? Если так, то я думаю, что проблема в том, что (по любой причине), когда вы добираетесь до этой точки в скрипте, все, что вы передаете XML::Simple, не имеет файла xml. Короче говоря, сценарий, который вы используете, может передавать неверную переменную (пусто? Пусто?) В XML::Simple, после чего модуль заглушается. Для отладки добавьте проверку того, что вы вручаете XML::Simple, прежде чем передать его. (См. Следующий абзац для конкретного примера, объясняющего почему Я думаю, что это может быть вашей проблемой.)

Несколько месяцев назад у меня была похожая проблема с Weather::Google. Короче говоря, модуль погоды пытался получить данные от Google через LWP::Simple без агента пользователя . Google начал (по-видимому) отклонять запросы без агента пользователя. Я должен был вернуться через модули, потому что ошибка, казалось, прибыла из XML::Simple. Фактически, это было вызвано тем, что было сделано в LWP::Simple и Weather::Google. Вернее, ошибка была результатом того, что Weather::Google не проверял данные, которые были в объекте, созданном с помощью LWP::Simple. В таком случае поначалу бывает трудно понять, что происходит и где.

...