我使用XML :: XPath来解析xml文件,但没遇到任何问题。由于几个原因(没有混淆(?),慢慢地,参见例如here)我尝试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>
但是如果root包含默认命名空间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>
一种解决方案可能是删除(手动)命名空间,但我想避免这种情况,因为原始文件将被定期下载和导入。所以,我有两个问题:
感谢您的帮助。