En supposant que vos données en mémoire ressemble à:
my $parsed = {
A => {
B => {
C => [ qw/here is your list/ ],
},
},
};
Ensuite, vous pouvez obtenir votre liste avec my @list = @{ $parsed->{A}{B}{C} }
.
Est-ce ce que vous essayez de faire? Edit: en tenant compte de certains commentaires, peut-être vous voulez Data::Visitor::Callback. Vous pouvez ensuite extraire tous les tableaux comme:
my @arrays;
my $v = Data::Visitor::Callback->new(
array => sub { push @arrays, $_ },
);
$v->visit($parsed_xml);
Après cela court, \ @arrays sera une liste de références à tableaux imbriqués arbitrairement profondément.
Enfin, si vous avez juste un nom d'attribut et que vous voulez rechercher des noeuds XML correspondants, vous voulez vraiment 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"]');
Quoi qu'il en soit, TMTOWTDI. Si vous travaillez avec XML, et voulez faire quelque chose de compliqué, XML :: Simple est rarement la bonne réponse. J'utilise XML :: LibXML pour tout, puisque c'est presque toujours plus facile. Une autre chose, vous pouvez vouloir Data::DPath. Il laisse vous "XPath" une structure de données Perl en mémoire:
Je ne pense pas que vous ayez besoin de beaucoup -> 's - $ xml_tree -> {A} {B} {C} devrait fonctionner correctement. –