我的Perl脚本中的findnodes语句出了什么问题?
发布时间:2020-12-15 23:37:30 所属栏目:大数据 来源:网络整理
导读:我有一个简单的xml文件,如下所示: ?xml version="1.0" encoding="UTF-8" standalone="yes" ?microplateDoc xmlns="http://moleculardevices.com/microplateML"camelids species name="Camelus bactrianus" common-nameBactrian Camel/common-name physical-
我有一个简单的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函数的最佳网站,以便我可以尝试自己解决这个问题?如何让脚本告诉我它正在做什么,因为此刻的输出只是一无所获.非常感谢. 解决方法
您已将名称空间前缀与文档相关联,但您的
XPath语法不使用它.
my @n = $xc->findnodes('//ns:species'); 应该做的工作. 没有前缀,你将无法匹配.此外,* /物种路径仅匹配当前上下文中的子项(即文档的顶层).使用//种类将找到文档中的所有物种元素.如果这对您不起作用(因为该元素出现在文档中您不想匹配的其他上下文中),请使用 /*/*/ns:species 因为元素是顶级的“曾孙子”. 还有一个XPath参考. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |