【问题标题】:XML::Smart Parser in PerlPerl 中的 XML::Smart Parser
【发布时间】:2010-03-10 15:51:12
【问题描述】:

我将继续处理过时的bioinformatics book,并尝试使用 XML::Smart 模块。

我怀疑模块的方法在 6 年的时间里发生了变化,而且我没有使用 perl 从cpan source 进行故障排除的经验。注释掉的代码证明了 ncbi.gov 查询功能,我在使用“新”方法时遇到了问题——它没有解析 XML。我究竟做错了什么?谢谢!

更新 具体来说,我在解析和显示 Id 数组时遇到了问题:my @Id = $results->{eSearchResult}{IdList}{Id}{'@'}; 我在 OSX 终端上运行它,运行此脚本时看不到任何 Id .我看到了正确的伯爵。谢谢!

#!/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";

【问题讨论】:

  • 你为什么用一本过时的书?

标签: perl xml-parsing


【解决方案1】:

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

打开严格,perl 会报告:

在 tmp:test.pl 第 19 行使用“strict subs”时不允许使用裸词“XML::Parser”。

这让我们可以追踪问题发生的位置。

应该引用第二个参数(要使用的解析器)的examples in the documentation say,而您没有引用它。

所以我们改为:

my $results = XML::Smart->new($esearch.$query,"XML::Parser");

……它运行了。

(顺便说一下,语言叫做"Perl", not "perl" or "PERL"

【讨论】:

【解决方案2】:

改变:

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

到:

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

【讨论】:

  • 这应该被编辑到问题中,而不是作为答案添加。
  • 你们这些人都紧张了。这是我犯的一个明显的错误,它是解决问题的解决方案。从而得到答案。我现在要回去看我的红宝石书了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 2021-09-30
  • 1970-01-01
相关资源
最近更新 更多