I used XML::XPath to parse an xml-file and I encountered no problem. For several reason (not mantained (?), slowly, see for example here) I try XML::LibXML but don't succeed. The problem seems to be in the root of the xml-file. The following code does work:
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>
But if the root contains the default namespace xmlns="http://whatever" the code above does not work (no output to terminal).
__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>
One solution could be to delete (manually) the namespace but I want to avoid this since the original file will be downloaded and imported perdiodically. So, I have two questions:
- Why the namespace does cause the problem using XML::LibXML but not when using XML::XPATH
- How can I solve this problem using XML::LibXML?
Thanks for help.