XML-Toolkit
view release on metacpan or search on metacpan
lib/XML/Filter/Moose.pm view on Meta::CPAN
package XML::Filter::Moose;
{
$XML::Filter::Moose::VERSION = '0.15';
}
use Moose;
use namespace::autoclean;
use MooseX::NonMoose;
extends qw(XML::SAX::Base);
has stack => (
isa => 'ArrayRef',
is => 'ro',
lazy_build => 1,
clearer => 'reset_stack',
traits => ['Array'],
handles => {
'add_element' => ['push'],
'pop_element' => ['pop'],
'root' => [ 'get', 0 ],
'current_element' => [ 'get', -1 ],
'stack_length' => ['count'],
}
);
sub _build_stack { [] }
has text => (
isa => 'Str',
is => 'rw',
traits => ['String'],
lazy => 1,
clearer => 'reset_text',
predicate => 'has_text',
default => sub { '' },
handles => { append_text => 'append', },
);
has cdata => ( isa => 'Bool', is => 'rw', );
sub is_root { return shift->stack_length == 0 }
sub parent_element {
my ($self) = @_;
if ( $self->stack_length > 1 ) {
return $self->stack->[-1];
}
$self->root;
}
sub start_document {
my ( $self, $doc ) = @_;
inner();
$self->reset_stack;
}
sub start_element {
my ( $self, $el ) = @_;
inner();
$self->add_element($el);
}
sub characters {
my ( $self, $el ) = @_;
inner();
$self->append_text( $el->{Data} ) if $el->{Data} =~ /\S/;
}
sub end_element {
my ( $self, $el ) = @_;
inner();
$self->pop_element;
$self->reset_text;
}
sub end_document {
my ( $self, $doc ) = @_;
inner();
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=head1 NAME
XML::Filter::Moose - A Moose-ified base class for XML::SAX
=head1 VERSION
version 0.15
=head1 SYNOPSIS
package MyFilter;
use Moose
extends qw(XML::SAX::Base);
augment start_element => start {
( run in 1.970 second using v1.01-cache-2.11-cpan-39bf76dae61 )