in reply to Strange Behavior with XML::Simple when pulling info out of an XML file

If there was just one DATASOURCE tag with a specific name you could use code like this:

use strict; use warnings; no warnings 'uninitialized'; use XML::Rules; my $parser = XML::Rules->new( stripspaces => 7, rules => { _default => 'content', DATASOURCE => 'by NAME', NAGIOS => 'pass no content', }, ); my $data = $parser->parse($file); #use Data::Dumper; #print Dumper($data); print $data->{cur}{ACT};
If there are more it's a bit more complicated as there is no builtin rule you could use and it's harder to get at the values you want:
my $parser = XML::Rules->new( stripspaces => 7, rules => { _default => 'content', DATASOURCE => sub { my ($tag,$attrs) = @_; return '@'.$attrs->{NAME} => $attrs; }, NAGIOS => 'pass no content', }, ); my $data = $parser->parse($file); #use Data::Dumper; #print Dumper($data); foreach my $datasource (@{$data->{cur}}) { print $datasource->{ACT}, "\n"; }
Of course if you do know you will not need the other data in the file you can ignore it and simplify the datastructure:
my $parser = XML::Rules->new( stripspaces => 7, rules => { _default => '', 'NAME,ACT' => 'content', DATASOURCE => sub { my ($tag,$attrs) = @_; return '@'.$attrs->{NAME} => $attrs->{ACT}; }, NAGIOS => 'pass no content', }, ); my $data = $parser->parse($file); #use Data::Dumper; #print Dumper($data); print join( ", ", @{$data->{cur}}), "\n";

HTH, Jenda
Enoch was right!
Enjoy the last years of Rome.

Replies are listed 'Best First'.
Re^2: Strange Behavior with XML::Simple when pulling info out of an XML file
by lunchlady55 (Initiate) on Nov 29, 2010 at 21:14 UTC

    Thank you for your help. I've gotten it working now.