Необходимо создать оператор foreach из хеш-массива переменных элементов в Perl - PullRequest
1 голос
/ 23 ноября 2010

Я использую XML::Simple в Perl для анализа XML-файла, и я застрял на том, как создать цикл для прохождения всех возможных элементов массива в хэше.

Воткак напечатать 0-й элемент массива:

print $book_info->{BookList}->{BookData}->{Prices}->{Price}[0]->{is_new};

Моя терминология может быть отключена при использовании слов хэш против массива, но я пытаюсь перебрать все элементы в {Price}[$ref]

Я пытался:

my @refs = $book_info->{BookList}->{BookData}->{Prices}->{Price};
foreach(@refs)
{
    print $book_info->{BookList}->{BookData}->{Prices}->{Price}[$_]->{store_id};
    print "\n";
}


и

foreach my $key (keys (%{$book_info->{BookList}->{BookData}->{Prices}->{Price}}))
{
    print $key."\n";
}


Этот следующий оператор печати возвращаетзначение "ARRAY(0x159a57c)"

   print [$book_info->{BookList}->{BookData}->{Prices}->{Price}];


Это работает для foreach, но я не могу получить доступ к элементам правильно:
foreach (@{$book_info->{BookList}->{BookData}->{Prices}->{Price}})
{
    print $book_info->{BookList}->{BookData}->{Prices}->{Price}[$_]; #this line is wrong
}

Есть предложения?В элементе {Prices} имеется несколько элементов {Price}, и каждый элемент {Price} имеет атрибуты [x] в XML.

Ответы [ 3 ]

3 голосов
/ 23 ноября 2010

Люди не совсем понимают это для вас.Если я вас правильно понимаю, вы хотите:

foreach my $element ( @{ $book_info->{BookList}->{BookData}->{Prices}->{Price} } ) {
    print $element->{store_id};
    print "\n";
}

Полезные советы по работе с вложенными структурами данных можно найти по адресу http://perlmonks.org/?node=References+quick+reference

2 голосов
/ 23 ноября 2010

Маргинально расширяющий ysth ответ:

foreach my $elem_ref (@{$book_info->{BookList}->{BookData}->{Prices}->{Price}})
{
    foreach my $key (sort keys %{$elem_ref})
    {
        print $elem_ref->{$key};
    }
    print "\n";
}

Частично это использует рекомендацию Perl Best Practices для обозначения ссылок с суффиксом _ref.

0 голосов
/ 23 ноября 2010

Вы пытались создать дамп содержимого $ book_info с помощью Data :: Dumper (используйте Data :: Dumper; print Dumper ($ book_info)? Это должно дать вам подсказку о том, как действовать.

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