use strict;
BEGIN {
$XML::Rabbit::Role::Node::VERSION = '0.0.2';
}
use Encode ();
# ABSTRACT: Base role for all nodes
parameter 'node' => ( isa => 'HashRef', default => sub { +{} } );
parameter 'xpc' => ( isa => 'HashRef', default => sub { +{} } );
parameter 'namespace_map' => ( isa => 'HashRef', default => sub { +{} } );
role {
my ($p) = @_;
has '_xpc' => (
is => 'ro',
isa => 'XML::LibXML::XPathContext',
reader => 'xpc',
init_arg => 'xpc',
%{ $p->xpc }
);
has '_node' => (
is => 'ro',
isa => 'XML::LibXML::Node',
reader => 'node',
init_arg => 'node',
%{ $p->node }
);
has 'namespace_map' => (
is => 'ro',
isa => 'HashRef[Str]',
lazy => 1,
default => sub { +{} },
%{ $p->namespace_map },
);
};
sub dump_xml {
my ($self) = @_;
return Encode::decode(
$self->node->ownerDocument->actualEncoding,
$self->node->toString(1),
);
}
no MooseX::Role::Parameterized;
1;
__END__
=pod
=encoding utf-8
=head1 NAME
XML::Rabbit::Role::Node - Base role for all nodes
=head1 VERSION
version 0.0.2
=head1 SYNOPSIS
See L<XML::Rabbit::RootNode> or L<XML::Rabbit::Node> for examples.
=head1 DESCRIPTION
This module provides attributes and methods common to all nodes.
See L<XML::Rabbit> for a more complete example.
=head1 ATTRIBUTES
=head2 node
An instance of a L<XML::LibXML::Node> class representing the a node in an XML document. Read Only.
=head2 xpc
An instance of a L<XML::LibXML::XPathContext> class initialized with the C<node> attribute. Read Only.
=head2 namespace_map
A HashRef of strings that defines the prefix/namespace XML mappings for the
XPath parser. Usually overriden in a subclass like this:
has '+namespace_map' => (
default => sub { {
myprefix => "http://my.example.com",
myotherprefix => "http://other.example2.org",
} },
);
=head1 METHODS
=head2 dump_xml
Dumps the XML of the current node as a native perl string.
=head1 AUTHOR
Robin Smidsrød <robin@smidsrod.no>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2010 by Robin Smidsrød.
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