1
2
2
5
2
2
3
2
2
4
4
2
5
####
use strict;
use warnings;
use XML::LibXML;
use XML::LibXML::XPathContext;
sub getObjAll {
my ($topList, $actNode, $idNodeList, $expression, $value) = @_;
my $top = $topList->[0];
$expression =~ s/:1:/'$value'/g;
my $failed;
foreach my $idNode (@{$idNodeList}) {
my $id = $idNode->textContent;
my $nodes = $top->findnodes("/objects/obj[id='$id' and $expression]");
return unless @{$nodes};
}
return $idNodeList;
};
my $dom = XML::LibXML->load_xml(location => 'foo.xml');
my $xc = XML::LibXML::XPathContext->new($dom);
$xc->registerFunction('getObjAll', \&getObjAll);
my @nodes = $xc->findnodes("/objects/obj[getObjAll(/, ., ./refs/id, "
. "'./version=:1:', ./version)]");
foreach my $node (@nodes) {
print $node->toString(1);
print "\n";
}