information
info 1
info 2
data 4
info
info
####
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;
####
use strict;
use XML::Parser;
# Set up the XML parser to point to standard symdev processing subroutines
my $parser = XML::Parser->new(
Handlers => {
Start => \&symdev_start,
End => \&symdev_end,
Final => \&symdev_final,
Char => \&symdev_char,
}
);
open my $symdev_list, '935.xml';
$parser->parse($symdev_list);
close $symdev_list;
{
my ( $dev, $text );
my @element_stack;
my %conf_of;
sub symdev_start {
my ( $expat, $name, %atts ) = @_;
push @element_stack, $name;
$text = '';
}
sub symdev_end {
my ( $expat, $name, %atts ) = @_;
pop @element_stack;
if ( $name eq 'dev_name' ) {
$dev = $text;
}
elsif ( $name eq 'configuration' ) {
$conf_of{$dev} = $text;
}
}
sub symdev_char {
my ( $expat, $string ) = @_;
$text .= $string;
}
sub symdev_final {
my ( $expat, $name, %atts ) = @_;
for my $key ( keys %conf_of ) {
print "$key\t$conf_of{$key}\n";
}
}
}
####
use strict;
use warnings;
use XML::Rules;
open my $symdev_list, '935.xml';
my @rules = (
dev_name => sub{ my $dev = $_[1]->{_content} },
);
my $parser = XML::Rules->new(rules => \@rules);
$parser->parse( $symdev_list);
close $symdev_list;