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>