NAME
XML::Diver - Dive XML with XML and first-class collection + alpha
SYNOPSIS
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;
DESCRIPTION
XML::Diver is XML data parse tool class that inherits XML::LibXML::XPathContext.
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::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 !!!
$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.
MOTIVE
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!).
PERFORMANCE
300% or over faster than XML::XPath::Diver. See https://gist.github.com/ytnobody/10354590/
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>