【发布时间】:2011-01-03 14:13:57
【问题描述】:
我在 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,并试图让他们的示例骆驼脚本与我的命名空间一起使用,因此是奇怪的命名空间。
【问题讨论】:
标签: perl xpath namespaces libxml2 xml-libxml