Subject: | Documentation for XPathContext::registerVarLookupFunc is incorrect |
Date: | Thu, 28 Mar 2013 13:22:31 -0400 |
To: | bug-XML-LibXML [...] rt.cpan.org |
From: | Misha Wolfson <mywolfson [...] gmail.com> |
*Current State*
The documentation says:
Variables <https://metacpan.org/module/XML::LibXML::XPathContext#___pod>
This example demonstrates registerVarLookup() method. We use XPath
variables to recycle results of previous evaluations:
sub var_lookup {
*my ($varname,$ns,$data)=@_;*
return $data->{$varname};
}
my $areas = XML::LibXML->new->parse_file('areas.xml');
my $empl = XML::LibXML->new->parse_file('employees.xml');
my $xc = XML::LibXML::XPathContext->new($empl);
my %variables = (
A => $xc->find('/employees/employee[@salary>10000]'),
B => $areas->find('/areas/area[district='Brooklyn']/street'),
);
# get names of employees from $A working in an area listed in $B
$xc->registerVarLookupFunc(\&var_lookup, \%variables);
my @nodes = $xc->findnodes('$A[work_area/street = $B]/name');
and
registerVarLookupFunc
$xpc->registerVarLookupFunc($callback, $data)
Registers variable lookup function *$prefix*. The registered function is
executed by the XPath engine each time an XPath variable is evaluated. It
takes three arguments: $data, variable name, and variable ns-URI and must
return one value: a number or string or any XML::LibXML:: object that can
be a result of findnodes: Boolean, Literal, Number, Node (e.g. Document,
Element, etc.), or NodeList. For convenience, simple (non-blessed) array
references containing only
XML::LibXML::Node<https://metacpan.org/module/XML::LibXML::Node>
objects
can be used instead of an
XML::LibXML::NodeList<https://metacpan.org/module/XML::LibXML::NodeList>
.
*
*
*Problems*
- The var_lookup function is wrong in the example is wrong. It should
take args in the order ($data, $name, $uri) as this unit
test<https://bitbucket.org/shlomif/perl-xml-libxml/src/bc0878287d05/t/32xpc_variables.t?at=XML-LibXML-1.72>
shows.
This is incredibly confusing to users.
- The description for registerVarLookupFunc uses the variable $prefix,
rather than $callback, which is also incorrect and confusing. However,
the order of args described here is correct.
This confusion makes the otherwise brilliant library much more difficult to
use and learn. Please help future users suffer less than I did.
Thanks!
--
Misha
Message body is not shown because it is too large.