XML :: XPath основан на XML :: Parser. В XML :: Parser есть опция НЕ использовать LWP для разрешения внешних сущностей (таких как DTD). А XML :: XPath позволяет передавать объект XML :: Parser для использования в качестве анализатора.
Итак, вы можете написать это:
my $p = XML::Parser->new( NoLWP => 1);
my $xp= XML::XPath->new( parser => $p, filename => "a.xhtml");
Обратите внимание, что в этом случае вы потеряете все сущности, кроме числовых и значений по умолчанию (>, <, &, & apos; и "). Парсер не будет жаловаться, но они исчезнут тихо (попробуйте включить & alpha; in таблицы и распечатывая ее, например). </p>
На самом деле вам, вероятно, не следует использовать XML :: XPath, который активно не поддерживается.
Попробуйте XML :: LibXML, если у вас нет проблем с установкой libxml2, его интерфейс очень похож на XML :: XPath, поскольку они оба реализуют DOM. XML :: LibXML также намного мощнее XML :: XPath и быстрее загружается. Если вам нужен модуль на основе expat / XML :: Parser, вы можете захотеть взглянуть на XML :: Twig (это откровенная самореклама, так как я являюсь автором модуля, извините). Также для HTML / dodgy XHTML вы можете использовать HTML :: TreeBuilder, который с добавлением HTML :: TreeBuilder :: XPath (также мной) поддерживает XPath.