首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML::Perl中的智能解析器

XML::Perl中的智能解析器
EN

Stack Overflow用户
提问于 2010-03-10 15:51:12
回答 2查看 1.6K关注 0票数 0

我继续使用过时的生物信息学书籍,并尝试使用XML::智能模块。

我怀疑该模块的方法在过去6年中发生了变化,而且我对perl缺乏从cpan源进行故障排除的经验。注释掉的代码证明了ncbi.gov查询函数,我在使用'new‘方法时遇到了麻烦--它没有解析XML。我做错了什么?谢谢!

具体而言,更新在解析和显示Id数组时遇到了问题:在OSX终端上运行,运行此脚本时没有看到任何Id。我看到的是正确的计数。谢谢!

代码语言:javascript
复制
#!/usr/local/bin/perl
# use lib "/Users/fogonthedowns/myperllib";
# use LWP::Simple;
use XML::Smart;
use strict;

#Set base URL for all eutils
my $utils = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils";
my $db = "Pubmed";
my $query ="Cancer+Prostate";
my $retmax = 10;
my $esearch = "$utils/esearch.fcgi?" . 
              "db=$db&retmax=$retmax&term=";

# my $esearch_result = get($esearch.$query);
# print "ESEARCH RESULT: $esearch_result\n";
# print "Using Query: \n$esearch$query\n";
# print "hello world\n";

my $results = XML::Smart->new($esearch.$query,"XML::Parser");
my $count = $results->{eSearchResult}{Count};
my @Id = $results->{eSearchResult}{IdList}{Id}{'@'};
my $all_Id = join("\n", @Id);

print "Count = $count\n";
print "$all_Id\n";
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-10 16:00:19

您做错的第一件事是注释掉use strict,第二件是使用-w而不是use warnings

有了严格的打开,perl将报告:

tmp:test.pl第19行中使用的“严格子”不允许使用Bareword“XML::解析器”。

这使我们能够追踪问题发生的地点。

应该引用第二个参数(要使用的解析器)的文档中的例子说,但您还没有引用它。

因此,我们改为:

代码语言:javascript
复制
my $results = XML::Smart->new($esearch.$query,"XML::Parser");

…然后它就跑了。

(顺便说一句,这种语言被称为"Perl",而不是"perl“或"PERL”)

票数 2
EN

Stack Overflow用户

发布于 2010-03-10 16:39:53

改变:

my @Id = $results->{eSearchResult}{IdList}{Id}{'@'};

至:

my @Id = $results->{eSearchResult}{IdList}{Id}('@');

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2418286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档