# $Id: /mirror/coderepos/lang/perl/MooseX-DOM/trunk/lib/MooseX/DOM/LibXML/ContextNode.pm 68052 2008-08-08T06:27:52.258779Z daisuke $ package MooseX::DOM::LibXML::ContextNode; use Moose; use Class::Inspector; use XML::LibXML; use XML::LibXML::XPathContext; has 'node' => ( is => 'rw', isa => 'XML::LibXML::Element', required => 1, handles => [ grep { !/^[0-9A-Z_]+$/ && !/^(?:findnodes|findvalue)$/ } ( @{ Class::Inspector->methods( 'XML::LibXML::Element', 'public' ) }, ) ] ); has 'context' => ( is => 'rw', isa => 'XML::LibXML::XPathContext', required => 1, handles => [ qw(findnodes findvalue) ], ); __PACKAGE__->meta->make_immutable; no Moose; sub BUILDARGS { my ($self, %args) = @_; my $xc = XML::LibXML::XPathContext->new($args{node}); while (my ($prefix, $uri) = each %{ $args{namespaces} || {} }) { next if defined $xc->lookupNs($uri); $xc->registerNs($prefix, $uri); } return { %args, context => $xc }; } 1;