The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

XML::XPath::Diver - Dive XML with XML::XPath and first-class collection + alpha

SYNOPSIS

use XML::XPath::Diver;
my $diver  = XML::XPath::Diver->new(...);  # same as XML::XPath;
my $images = $diver->dive('//img');        # OMG! $images is Class::Builtin::Array class!
my $urls   = $images->each(sub {
    my $node = shift;        # this is img element node, but XML::XPath::Diver object!
    $node->attr('src');      # return image url 
});
$urls->each(sub { say shift });  # say image url


# as oneline
$diver->dive('//img')->each(sub{ say shift->attr('src') });


# or simple perl way
my @images = $diver->dive('//img');
my @urls = map { $_->attr('src') } @images;
say $_ for @urls;

DESCRIPTION

XML::XPath::Diver is XML data parse tool class that inherits XML::XPath.

METHODS

dive

my $nodes = $diver->dive($xpath); # first-class collection (Class::Builtin::Array object)
my @nodes = $diver->dive($xpath); # primitive array

Returns Class::Builtin::Array object or primitive array. These contains XML::XPath::Diver objects.

For this reason, It can as following.

# case of first-class collection
my $child_nodes = $nodes->each(sub{
    my $node = shift; # !!! This is a XML::XPath::Diver object !!!
    $node->dive($some_xpath);
});


# case of primitive array
my @child_nodes = map {( $_->dive($some_xpath) )} @nodes;

attr

Returns string value of attribute that specified.

text

my $str = $diver->text($xpath);

Returns string that contained in specified xpath element.

$xpath is default '/'.

to_string

Returns XML data as string.

LICENSE

Copyright (C) ytnobody.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

ytnobody ytnobody@gmail.com