XML :: Smart Parser в Perl - PullRequest
       9

XML :: Smart Parser в Perl

0 голосов
/ 10 марта 2010

Я продолжаю работать над устаревшей книгой по биоинформатике и пытаюсь использовать модуль XML :: Smart.

Я подозреваю, что методы модуля изменились в течение 6 лет, и я неопытен в perl для устранения неполадок из cpan source . Закомментированный код подтверждает функции запросов ncbi.gov, у меня проблемы с «новым» методом - он не разбирает XML. Что я делаю неправильно? Спасибо!

Обновление В частности, у меня возникают проблемы с анализом и отображением массива Id: my @Id = $results->{eSearchResult}{IdList}{Id}{'@'}; Я запускаю это на терминале OSX и не вижу идентификаторов при запуске этого сценария. Я вижу правильного графа. Спасибо!

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

Ответы [ 2 ]

2 голосов
/ 10 марта 2010

Первое, что вы сделали неправильно, это закомментируйте use strict, второе - используйте -w вместо use warnings.

При строгом включении Perl сообщит:

Базовое слово «XML :: Parser» не допускается, когда в строчке 19: tmp: test.pl используются «строгие подпрограммы».

Это позволяет нам отслеживать, где возникает проблема.

Примеры в документации говорят , что второй аргумент (используемый синтаксический анализатор) должен быть заключен в кавычки, а вы его не заключили в кавычки.

Итак, мы изменим на:

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

… и он работает.

(кстати, язык называется "Perl", а не "perl" или "PERL" )

0 голосов
/ 10 марта 2010

изменение:

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

до:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...