my @return = &sub('Root->PersonA->Pets'); #### use Data::Dumper; use XML::Simple; use XML::XPath; use XML::XPath::XMLParser; my $perl_datastructure = { Root => { 'PersonA' => { Pets => [ PetA, PetB, ], }, 'PersonB' => [ { Pets => PetAA, }, { Pets => PetBB, }, ], }, }; print Dumper($perl_datastructure); $xmlstring = XMLout($perl_datastructure, NoAttr => 1, KeepRoot => 1); #print $xmlstring; my $xp = XML::XPath->new( xml => $xmlstring ); my $nodeset = $xp->find("//Root/PersonB/Pets"); foreach my $node ($nodeset->get_nodelist) { my $perldata = XMLin( XML::XPath::XMLParser::as_string($node) ); print $perldata, "\n"; }