Предположим, ваши данные в памяти выглядят так:
my $parsed = {
A => {
B => {
C => [ qw/here is your list/ ],
},
},
};
Тогда вы можете получить свой список с помощью my @list = @{ $parsed->{A}{B}{C} }
.
Это то, что вы пытаетесь сделать?
Редактировать: принимая во внимание некоторые комментарии, возможно, вы хотите
Visitor Data :: :: Callback .
Затем вы можете извлечь все массивы, например:
my @arrays;
my $v = Data::Visitor::Callback->new(
array => sub { push @arrays, $_ },
);
$v->visit( $parsed_xml );
После этого \ @arrays будет список ссылок на
произвольно-глубоко вложенные массивы.
Наконец, если у вас просто есть имя атрибута и вы хотите найти
сопоставляя узлы XML, вы действительно хотите XPath:
use XML::LibXML;
my $parser = XML::LibXML->new;
my $doc = $parser->parse_string( $xml_string );
# yeah, I am naming the variable data. so there.
my @data = map { $_->textContent } $doc->findnodes('//p[@id="foo"]');
Во всяком случае, TMTOWTDI. Если вы работаете с XML, и хотите сделать
что-то сложное, XML :: Simple редко является правильным ответом. я использую
XML :: LibXML для всего, так как это почти всегда проще.
Еще одна вещь, вы можете захотеть
Данные :: DPath . Позволяет
Вы "XPath" структура данных Perl в памяти: