++ed by:
1 non-PAUSE user
Author image Satoshi AZUMA


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


    use XML::Diver;
    my $xml_str = ...;
    my $diver  = XML::Diver->load_xml(string => $xml_str); # same as XML::LibXML;
    my $images = $diver->dive('//img'); # $images is Class::Builtin::Array class!
    my $urls   = $images->each(sub {
        my $node = shift;        # this is img element node, but XML::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;


XML::Diver is XML data parse tool class that inherits XML::LibXML::XPathContext.



    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::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::Diver object !!!
    # case of primitive array
    my @child_nodes = map {( $_->dive($some_xpath) )} @nodes;


Returns string value of attribute that specified.


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

Returns string that contained in specified xpath element.

$xpath is default '/'.


Returns XML data as string.


I thought, I want a simple and easy XML parsing module. And its directivity are followings.

1. Parsable with XPath

2. Less Rules

3. Depth Preference Parsing

4. Iterative Processing to horizontally

5. Lightweight

Some months ago, I wrote XML::XPath::Diver as a concept release of above. But, that inherits XML::XPath. XML::XPath has been abandoned for a long time (Last update is 26 Jan. 2003). For this reason, I decided to remove its dependency.

Then, I wrote this module (without "XPath" string in dist-name!).


300% or over faster than XML::XPath::Diver. See https://gist.github.com/ytnobody/10354590/


Copyright (C) ytnobody.

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


ytnobody <ytnobody@gmail.com>