XML-Handler-ExtOn
view release on metacpan or search on metacpan
lib/XML/Handler/ExtOn/Element.pm view on Meta::CPAN
use warnings;
use Carp;
use Data::Dumper;
use XML::Handler::ExtOn::TieAttrs;
use XML::Handler::ExtOn::Attributes;
use XML::Handler::ExtOn::Element;
for my $key (qw/ _context attributes _skip_content _delete_element _stack /) {
no strict 'refs';
*{ __PACKAGE__ . "::$key" } = sub {
my $self = shift;
$self->{$key} = $_[0] if @_;
return $self->{$key};
}
}
# new name=>< element name>, context=>< context >[, sax2=><ref to sax2 structure>]
#
#Create Element object
#
# my $element = new XML::Handler::ExtOn::Element::
# name => "p",
# context => $context,
# [sax2 => $t1_elemnt ];
#
#
sub new {
my ( $class, %attr ) = @_;
my $self = bless {}, $class;
$self->_context( $attr{context} ) or die "not exists context parametr";
my $name = $attr{name};
$self->attributes(
new XML::Handler::ExtOn::Attributes::
context => $self->_context,
sax2 => exists $attr{sax2} ? $attr{sax2}->{Attributes} : {}
);
if ( my $sax2 = $attr{sax2} ) {
$name ||= $sax2->{Name};
my $prefix = $sax2->{Prefix} || '';
$self->set_prefix( );
$self->set_ns_uri( $self->ns->get_uri( $prefix ) );
}
$self->_stack([]);
$self->_set_name($name);
return $self;
}
sub _set_name {
my $self = shift;
$self->{__name} = shift || return $self->{__name};
}
=head2 add_content <element object1>[, <element object2> ...]
Add commands to contents stack.Return C<$self>
$elem->add_content(
$self->mk_from_xml("<p/>"),
$self->mk_cdata("TEST CDATA"),
)
=cut
sub add_content {
my $self = shift;
push @{$self->_stack()}, @_;
return $self
}
=head2 mk_element <tag name>
Create element object in namespace of element.
=cut
sub mk_element {
my $self = shift;
my $name = shift;
my %args = @_;
$args{context} ||= $self->ns->sub_context();
my $elem = new XML::Handler::ExtOn::Element::
name => $name,
%args;
return $elem;
}
sub set_prefix {
my $self = shift;
my $prefix = shift;
if ( defined $prefix ) {
$self->{__prefix} = $prefix;
$self->set_ns_uri( $self->ns->get_uri($prefix) );
}
$self->{__prefix};
}
sub ns {
return $_[0]->_context;
}
=head2 add_namespace <Prefix> => <Namespace_URI>, [ <Prefix1> => <Namespace_URI1>, ... ]
Add Namespace mapping. return C<$self>
If C<Prefix> eq '', this namespace will then apply to all elements
that have no prefix.
$elem->add_namespace(
"myns" => 'http://example.com/myns',
"myns_test", 'http://example.com/myns_test',
''=>'http://example.com/new_default_namespace'
);
=cut
sub add_namespace {
my $self = shift;
my ( $prefix, $ns_uri ) = @_;
( run in 0.767 second using v1.01-cache-2.11-cpan-39bf76dae61 )