Perl/XML::LibXML не анализируется из-за пространства имен

Я использовал XML::XPath для разбора xml-файла и не столкнулся с проблемой. По нескольким причинам (не поддерживается (?), медленно, см., например, здесь) Я пытаюсь использовать XML::LibXML, но безуспешно. Проблема видимо в корне xml-файла. Следующий код работает:

use strict; 
use warnings;
use XML::LibXML;

my $prsr = XML::LibXML->new();
$prsr->keep_blanks(0);
my $xp = $prsr->parse_fh(\*DATA);

my @node_article = $xp->findnodes('/ARTICLE/*');

foreach my $node (@node_article) {
    print "$node\n\n";
}

__DATA__
  <ARTICLE xmlns:xsd="http://whatever" xmlns:xsi="http://whatever">
    <EVENT name="cat1" />  
    <EVENT name="cat2" />  
    <EVENT name="cat3" />  
    <EVENT name="cat4" />  
    <EVENT name="cat5" />  
  </ARTICLE>

введите здесь описание изображения

Но если корень содержит пространство имен по умолчанию xmlns="http://whatever", приведенный выше код не работает (нет вывода на терминал).

__DATA__
  <ARTICLE xmlns:xsd="http://whatever" xmlns:xsi="http://whatever" xmlns="http://whatever">
    <EVENT name="cat1" />  
    <EVENT name="cat2" />  
    <EVENT name="cat3" />  
    <EVENT name="cat4" />  
    <EVENT name="cat5" />  
  </ARTICLE>

Одним из решений может быть удаление (вручную) пространства имен, но я хочу избежать этого, поскольку исходный файл будет загружаться и импортироваться периодически. Итак, у меня есть два вопроса:

  1. Почему пространство имен вызывает проблему при использовании XML::LibXML, но не при использовании XML::XPATH
  2. Как решить эту проблему с помощью XML::LibXML?

Спасибо за помощь.


person giordano    schedule 02.12.2015    source источник
comment
1. Потому что XML::XPath содержит ошибки.   -  person ikegami    schedule 02.12.2015
comment
XML::LibXML, пространства имен и findvalue   -  person Miller    schedule 02.12.2015
comment
Спасибо всем за ссылки и извините за избыточность.   -  person giordano    schedule 04.12.2015