我在 Perl中无法理解/使用带有XML::LibXML包的名称空间。我可以成功访问元素但不能访问属性。我有以下代码可以访问 XML 文件(http://pastebin.com/f3fb9d1d0)。
my $tree = $parser->parse_file($file); # parses the file contents into the new libXML object.
my $xpc = XML::LibXML::XPathContext->new($tree);
$xpc->registerNs(microplateML => 'http://moleculardevices.com/microplateML');
然后我尝试访问一个名为 common-name 的元素和一个名为 name 的属性。
foreach my $camelid ($xpc->findnodes('//microplateML:species')) {
my $latin_name = $camelid->findvalue('@name');
my $common_name = $camelid->findvalue('common-name');
print "$latin_name, $common_name" ;
}
但只有拉丁名称 ( @name
) 打印出来,通用名称没有。我做错了什么,我怎样才能打印出通用名称?
在这种情况下,@name 有什么作用?我认为它是一个数组,并且应该将属性放入一个数组中,因为可以有多个,但元素(如 common-name)不应该是因为应该只有一个?
我一直在关注这里的例子:http ://www.xml.com/pub/a/2001/11/14/xml-libxml.html 和这里: http: //perl-xml.sourceforge.net/faq /#namespaces_xpath,并试图让他们的示例骆驼脚本与我的命名空间一起工作,因此奇怪的命名空间。