NAME

HTML::Element::AbsoluteXPath - Add absolute XPath to HTML::Element support

VERSION

version 0.001

DESCRIPTION

HTML::Element::AbsoluteXPath adds ABSOLUTE XPath support to HTML::Element. 'abs_xpath' method is added.

It generates smarter XPath with HINTS which are attributes name of HTML element, like 'class','id','width','name'...

SYSNOPSIS

use HTML::Element;
use HTML::Element::AbsoluteXPath;

...

print $elem->abs_xpath;
# output like '/html/body/div[1]'

more

use 5.010;
use HTML::TreeBuilder->new;
use HTML::Element::AbsoluteXPath;

my $root = HTML::TreeBuilder->new;
my $html = <<END;
<html>
    <body>
        <div id="test" class="testclass"></div>
        <div class="testclass"></div>
        <div>
            <div class="innerclass"></div>
            <div></div>
        </div>
    </body>
</html>
END
$root->parse($html);
$root->eof();

# get abs xpath of root
say $root->abs_xpath; # '/html' 

my @found = $root->find_by_tag_name('div');

# get abs xpath
say $found[0]->abs_xpath; # '/html/body[1]/div[1]' 

# get abs xpath with 'id' hint.
say $found[0]->abs_xpath('id'); #, "/html/body[1]/div[\@id='test'][1]"

# get abs xpath with 'id' and 'class' hints.
say $found[0]->abs_xpath('id','class'); # "/html/body[1]/div[\@id='test' and \@class='testclass'][1]"

# get abs xpath hints for elem has just 'class' attr.
say $found[1]->abs_xpath('id','class'); # "/html/body[1]/div[\@class='testclass'][2]"

# get abs xpath with hints for elem has no attrs
say $found[2]->abs_xpath('id','class'); # "/html/body[1]/div[3]"

# get abs xpath overwrapped one
say $found[2]->content->[0]->abs_xpath('id','class'); # "/html/body[1]/div[3]/div[\@class='innerclass'][1]"

# get abs xpath overwrapped sibling
say $found[2]->content->[1]->abs_xpath('id','class'); # "/html/body[1]/div[3]/div[2]"

METHODS

abs_xpath( [ $hint, ... ] )

Returns absolute xpath of current HTML::Element object.

Hints are optional. Internally, '_tag' is added to hints. With no hints, it generates a xpath with only ordinary expressions like "/html[1]/body[1]/div[1]", "/html[1]/body[1]/a[13]". If you set 'class' as hint, it generates a smarter xpath like "/html[1]/body[1]/div[@class='SOME'][1]","/html[1]/body[1]/div[2]".

Hints work for being matched attribute names which have values.

SEE ALSO

SOURCE

https://github.com/sng2c/HTML-Element-AbsoluteXPath

AUTHOR

HyeonSeung Kim <sng2nara@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by HyeonSeung Kim.

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