XML::Generator::Moose - A Moose based subclass of XML::SAX::Base


XML-Toolkit documentation Contained in the XML-Toolkit distribution.

Index


Code Index:

NAME

Top

XML::Generator::Moose - A Moose based subclass of XML::SAX::Base

SYNOPSIS

Top

    package MySAX::Generator;
    use Moose;
    extends qw(XML::Generator::Moose);    




DESCRIPTION

Top

XML::Generator::Moose is a subclass of XML::SAX::Base that provides a standard framework and default implementation of methods for generating SAX events.

ATTRIBUTES

Top

Handler

See Also XML::SAX::Base

METHODS

Top

start_element
end_element
characters
newline
cdata
parse

See Also XML::SAX::Base

INCOMPATIBILITIES

Top

None reported.

BUGS AND LIMITATIONS

Top

No bugs have been reported.

Please report any bugs or feature requests to bug-xml-toolkit@rt.cpan.org, or through the web interface at http://rt.cpan.org.

AUTHOR

Top

Chris Prather <chris@prather.org>

LICENCE AND COPYRIGHT

Top


XML-Toolkit documentation Contained in the XML-Toolkit distribution.

package XML::Generator::Moose;
use Moose;
use namespace::autoclean;
extends qw(XML::Filter::Moose);

has Handler => (
    isa      => 'Object',
    is       => 'ro',
    required => 1,
    handles  => [qw(start_document end_document)]
);

after 'start_document' => sub {
    my ($self) = @_;
    $self->xml_decl( { Version => '1.0', Encoding => 'UTF-8' } );
    $self->newline;
};

sub xml_decl { my ( $self, $data ) = @_; $self->Handler->xml_decl($data) }

sub start_element {
    my ( $self, $name, $attr, $data ) = @_;
    confess "can't start empty element" unless $name;
    $self->Handler->start_element(
        { Name => $name, Attributes => $attr, %$data } );
}

sub end_element {
    my ( $self, $name ) = @_;
    $self->Handler->end_element( { Name => $name } );
    $self->newline;
}

sub characters {
    my ( $self, $data ) = @_;
    $self->Handler->characters( { Data => $data } );
}

sub newline {
    my $self = shift;
    $self->Handler->characters( { Data => "\n" } );
}

sub cdata {
    my ( $self, $data ) = @_;
    $self->start_cdata();
    $self->Handler->characters( { Data => $data } );
    $self->end_cdata();
}

sub start_prefix_mapping {
    my ( $self, $prefix, $uri ) = @_;
    $self->Handler->start_prefix_mapping(
        { Prefix => $prefix, NamespaceURI => $uri } );
}

sub end_prefix_mapping {
    my ( $self, $prefix ) = @_;
    $self->Handler->end_prefix_mapping( { Prefix => $prefix } );
}

sub parse {
    my ($self) = @_;
    $self->start_document();
    inner();
    $self->end_document();
}

__PACKAGE__->meta->make_immutable;
1;
__END__