http://www.perlmonks.org?node_id=959028


in reply to Question about XML::Simple

use XML::Twig;

# we want an xpath like: //[@name="a"]//...//[@name="b"]/warn
my @names = qw(snoopdogg cpu cpu load1); my $twig = XML::Twig->new; $twig->parse(<<'XML'); <conf name="snoopdogg" serial="1" target="172.16.1.3"> <services> <service name="cpu"> <plugins> <plugin name="cpu" target="172.16.1.3" schedule="60"> <probes> <probe name="load1"> <warn value="4" operator="&gt;"/> <crit value="10" operator="&gt;"/> </probe> </probes> </plugin></plugins></service></services> </conf> XML my ($elt) = $twig->get_xpath( (join "//" => "", map qq{[\@name="$_"]}, @names) . "/warn" ); printf "value: %d\n", $elt->att('value'); __END__ value: 4