From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict;
$XML::Rabbit::Trait::XPathValueList::VERSION = '0.4.1';
# ABSTRACT: Multiple value xpath extractor trait
around '_process_options' => sub {
my ($orig, $self, $name, $options, @rest) = @_;
$self->$orig($name, $options, @rest);
# This should really be:
# has '+isa' => ( required => 1 );
# but for some unknown reason Moose doesn't allow that
confess("isa attribute is required") unless defined( $options->{'isa'} );
};
sub _build_default {
my ($self) = @_;
return sub {
my ($parent) = @_;
my $xpath_query = $self->_resolve_xpath_query( $parent );
my @nodes;
foreach my $node ( $self->_find_nodes( $parent, $xpath_query ) ) {
push @nodes, $node->to_literal . "";
}
return \@nodes;
};
}
Moose::Util::meta_attribute_alias('XPathValueList');
no Moose::Role;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
XML::Rabbit::Trait::XPathValueList - Multiple value xpath extractor trait
=head1 VERSION
version 0.4.1
=head1 SYNOPSIS
package MyXMLSyntaxNode;
use Moose;
with 'XML::Rabbit::RootNode';
has all_references => (
isa => 'ArrayRef[Str]',
traits => [qw(XPathValueList)],
xpath_query => '//@href|//@src',
);
no Moose;
__PACKAGE__->meta->make_immutable();
1;
=head1 DESCRIPTION
This module provides the extraction of primitive values from an XML node based on an XPath query.
See L<XML::Rabbit> for a more complete example.
=head1 METHODS
=head2 _build_default
Returns a coderef that is run to build the default value of the parent attribute. Read Only.
=head1 AUTHOR
Robin Smidsrød <robin@smidsrod.no>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2015 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