我无法理解/使用Perl中的XML::LibXML包的名称空间。我可以成功访问元素,但不能访问属性。我有以下代码访问XML文件(http://pastebin.com/f3fb9d1d0)。如何在Perl中访问XML :: LibXML中的属性和元素?
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在这种情况下做了什么?我认为它是一个数组,并且该属性应该放入一个数组中,因为可以有多个属性,但元素(如通用名称)不应该是因为应该只有一个?
我一直在这里遵循的例子:http://www.xml.com/pub/a/2001/11/14/xml-libxml.html 这里:http://perl-xml.sourceforge.net/faq/#namespaces_xpath,并试图让他们的榜样骆驼剧本与我的命名空间的工作,因此怪异的命名空间。
感谢尼尔斯,我得到了我原来的问题走错了路周围,拉丁文名字(@name)打印出来很好,但通用名称不是。不知道这是否会改变你的答案。我试过你的例子,但是我根本无法打印任何东西。我遇到的问题更多地与我想的命名空间有关。如果我不使用前两个命名空间行(在它们中带有$ xpc),并且只需引用elemtents,如http://www.xml.com/pub/a/2001/11/14/xml-libxml中的示例.html然后一切都很好,但是当我包含名称空间时,它不起作用,但我不知道elementIwant – John 2010-01-12 07:30:51
我删除了名称空间并平衡了您所指的用于使示例运行的XML文件中的标记。我将添加命名空间到示例。 – 2010-01-12 15:30:47
我在pastebin上更新了您的XML文件http://pastebin.com/f3fb9d1d0 – 2010-01-12 18:13:36