我的Perl脚本中的findnodes语句出了什么问题?

我的Perl脚本中的findnodes语句出了什么问题?,第1张

概述我有一个简单的xml文件,如下所示: <?xml version="1.0" encoding="UTF-8" standalone="yes" ?><microplateDoc xmlns="http://moleculardevices.com/microplateML"><camelids> <species name="Camelus bactrianus"> <commo 我有一个简单的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 nodesmy @n = $xc->findnodes('*/specIEs');  #was */specIEsforeach $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参考.

总结

以上是内存溢出为你收集整理的我的Perl脚本中的findnodes语句出了什么问题?全部内容,希望文章能够帮你解决我的Perl脚本中的findnodes语句出了什么问题?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1271339.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存