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は何をしますか?私はそれが配列であり、属性は複数存在する可能性があるため配列に入れる必要があると思いますが、要素(共通名など)は1つだけである必要があるため、そうすべきではありませんか?
私はここの例に従ってきました: http: //www.xml.com/pub/a/2001/11/14/xml-libxml.html そしてここ:http://perl-xml.sourceforge.net/faq /#namespaces_xpath、そして彼らのサンプルのラクダスクリプトを私の名前空間で動作させようとしているので、奇妙な名前空間です。