IO-Async-XMLStream-SAXReader
view release on metacpan or search on metacpan
lib/IO/Async/XMLStream/SAXReader.pm view on Meta::CPAN
$self->{ 'on_' . $method } = delete $params{ 'on_' . $method };
}
}
$self->_SAXReader;
return $self->SUPER::configure(%params);
}
sub on_read {
my ( $self, $buffref, $eof ) = @_;
my $text = substr ${$buffref}, 0, length ${$buffref}, q[];
$self->_SAXReader->{Parser}->parse_chunk($text) if length $text;
if ($eof) {
$self->_SAXReader->{Parser}->finish;
return 0;
}
return 1;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
IO::Async::XMLStream::SAXReader - Dispatch SAX events from an XML stream.
=head1 VERSION
version 0.001002
=head1 SYNOPSIS
use IO::Async::XMLStream::SAXReader;
use IO::Async::Loop;
my $loop = IO::Async::Loop->new();
my $sax = IO::Async::XMLStream::SAXReader->new(
handle => $SOME_IO_HANDLE,
on_start_document => sub {
my ( $saxreader, @args ) = @_;
...
},
on_start_element => sub {
my ( $saxreader, @args ) = @_;
...
},
on_end_document => sub {
$loop->stop;
},
);
$loop->add($sax);
$loop->run();
This sub-classes L<< C<IO::Async::Stream>|IO::Async::Stream >> to provide a streaming SAX parser.
For the individual C<SAX> events that can be listened for, see L<< C<XML::SAX::Base>|XML::SAX::Base >>.
All are prefixed with the C<on_> prefix as constructor arguments.
Alternatively, if you already have an L<< C<XML::SAX>|XML::SAX >> handler class you wish to reuse:
use IO::Async::XMLStream::SAXReader;
use IO::Async::Loop;
my $loop = IO::Async::Loop->new();
my $sax = IO::Async::XMLStream::SAXReader->new(
handle => $SOME_IO_HANDLE,
sax_handler => YourClass->new();
on_read_eof => sub {
$loop->stop;
},
);
$loop->add($sax);
$loop->run();
=head1 AUTHOR
Kent Fredric <kentnl@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2017 by Kent Fredric <kentfredric@gmail.com>.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
( run in 1.901 second using v1.01-cache-2.11-cpan-97f6503c9c8 )