use strict; use XML::XPath; use XML::XPath::XMLParser; my $xp = XML::XPath->new( xml => 'query.xml' ); print 'There are ', $xp->find('queries/query')->size, " 'query' nodes. +\n"; foreach my $element (qw/topN layer filter name datatype/) { print "$element: ", ( join ', ', map { XML::XPath::XMLParser::as_string($_) =~ />([^<]*)find("queries/query/$element")->get_nodelist ), "\n"; } ## end foreach my $element (qw/topN layer filter name datatype/) query.xml topHosts 20 LINK 20 20 topHosts 20 topHosts 120 LINK 120 120 topHosts 120