#!/usr/bin/perl use warnings; use strict; use XML::LibXML; use Data::Dumper; my $bamxml = 'file.xml'; my $dom = 'XML::LibXML'->load_xml(location => $bamxml); my $apps = $dom->findnodes('/nodes/node/children/node/children/node[@ciType="application"]'); my @records; for my $bamnode (@$apps) { my $name = $bamnode->findvalue('@name'); my $citype = $bamnode->findvalue('@ciType'); my $status = $bamnode->findvalue('dimension/@status'); my $time = $bamnode->findvalue('normalize-space(dimension/body/entry[@key="Last Status Change"])'); push @records, { name => $name, citype => $citype, status => $status, Time => $time }; } print Dumper \@records;