use strict; use XML::SAX; my $parser = XML::SAX::ParserFactory->parser( Handler => symdevHandler->new ); open my $symdev_list, '935.xml'; $parser->parse_file($symdev_list); close $symdev_list; package symdevHandler; use base qw(XML::SAX::Base); my ( $dev ); my @element_stack; my %conf_of; sub start_element { my ($self, $el) = @_; push @element_stack, $el->{Name}; } sub end_element { my ($self, $el) = @_; pop @element_stack; } sub characters { my ($self, $el) = @_; my $text = $el->{Data}; my $in_element = $element_stack[-1]; if ( $in_element eq 'dev_name' ) { $dev = $text; } elsif ( $in_element eq 'configuration' ) { $conf_of{$dev} = $text; } } sub end_document { my ($self, $el) = @_; for my $key ( keys %conf_of ) { print "$key\t$conf_of{$key}\n"; } } 1;