NAME
PPIx::XPath - an XPath implementation for the PDOM
SYNOPSIS
use PPI;
use PPI::XPath;
use Tree::XPathEngine;
my $pdom = PPI::Document->new('some_code.pl');
my $xpath = Tree::XPathEngine->new();
my @subs = $xpath->findnodes('//Statement-Sub',$pdom);
my @vars = $xpath->findnodes('//Token-Symbol',$pdom);
Deprecated interface, backward-compatible with PPIx::XPath
version 1:
use PPIx::XPath;
my $pxp = PPIx::XPath->new("some_code.pl");
my @subs = $pxp->match("//Statement::Sub");
my $vars = $pxp->match("//Token::Symbol");
DESCRIPTION
This module augments PPI's classes with the methods required by Tree::XPathEngine, allowing you to perform complex XPath matches against any PDOM tree.
See Tree::XPathEngine for details about its methods.
Mapping the PDOM to the XPath data model
Each node in the PDOM is an element as seen by XPath
The name of the element is the class name of the node, minus the initial
PPI::
, with::
replaced by-
. That is:($xpath_name = substr($pdom_node->class,5)) =~ s/::/-/g;
Only "significant" nodes are seen by XPath
all scalar-valued accessors of PDOM nodes are visible as attributes
"here-docs" contents are not mapped
BUGS and LIMITATIONS
"here-docs" contents are not mapped
node ordering is slow, because I could not find a way in PPI to compare two nodes for document order; suggestions are most welcome
SEE ALSO
http://www.w3.org/TR/xpath (the XPath specification)
AUTHOR
Dan Brook <cpan@broquaint.com> original author
Gianni Ceccarelli <dakkar@thenautilus.net> Tree::XPathEngine-based re-implementation