gpt4 book ai didi

perl - 我的 Perl 脚本中的 findnodes 语句有什么问题?

转载 作者:行者123 更新时间:2023-12-03 15:28:20 27 4
gpt4 key购买 nike

我有一个简单的 xml 文件,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<microplateDoc xmlns="http://moleculardevices.com/microplateML">
<camelids>
<species name="Camelus bactrianus">
<common-name>Bactrian Camel</common-name>
<physical-characteristics>
<mass>450 to 500 kg.</mass>
<appearance>
Blah blah blah
</appearance>
</physical-characteristics>
</species>
</camelids>
</microplateDoc>

我正在尝试使用以下 perl 脚本读取物种名称:
use XML::LibXML;

my $parser = XML::LibXML->new();
my $doc = $parser->parse_file('/Users/johncumbers/Documents/7_Scripts/Perl/XML_to_MySQL/simplified_camelids.xml');
my $xc = XML::LibXML::XPathContext->new( $doc->documentElement() );
$xc->registerNs('ns', 'http://moleculardevices.com/microplateML');

#loop through to find species nodes
my @n = $xc->findnodes('*/species'); #was */species
foreach $nod (@n) {
print "A: ".$nod->getAttribute("name")."\n";
my @c = $nod->findnodes('./common-name');
}

但我没有找到任何节点。你能帮忙告诉我为什么它不起作用吗?什么是查找 perl 函数的最佳网站,以便我可以尝试自己解决这个问题?我怎样才能让脚本告诉我它在做什么,因为目前的输出什么都没有。非常感谢。

最佳答案

您已将 namespace 前缀与文档相关联,但您的 XPath语法不使用它。

my @n = $xc->findnodes('//ns:species');

应该做的工作。

如果没有前缀,您将无法匹配。还有 */species path 将只匹配当前上下文中的子项(即文档的顶层)。使用 //species会找到所有 species文档中的元素。如果这对您不起作用(因为该元素出现在您不想匹配的文档中的其他上下文中),请使用
/*/*/ns:species

因为元素是顶级的“曾孙”。

再来一张 XPath引用。

关于perl - 我的 Perl 脚本中的 findnodes 语句有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2079435/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com