commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From John Casey <>
Subject [JXPATH] Am I doing something stupid here?
Date Mon, 14 Apr 2014 18:09:28 GMT
Hi all,

I'm trying to learn how to use JXPath with DOM in order to speed up some 
code that uses a lot of xpath. I've seen blog posts suggesting it's 
about twice as fast as JAXP's XPath processor...

The problem I'm running into is when I construct a JXPathContext around 
a node down in the DOM tree, then try to select a node elsewhere in the 
tree using the ancestor:: axis. I'm attaching a sample XML file and unit 
test that shows what I'm trying to do.

I've run this through a debugger, and it appears that the 
DOMNodePointer.getImmediateParent() doesn't even try to look at the 
Node.getParentNode()...if it doesn't have a pre-existing parent (from 
its ctor) then it just dumbly returns the null parent.

I haven't done enough research yet to know how to get DOMNodePointer to 
populate its parent (using the public API, not the nuts-and-bolts impl 
details), but in the attached example you can see I try two approaches:

1. the naive approach, which is also the last one in the code. IMO, this 
one should work!

2. a brute-force alternative, where JXPathContext instances for each 
intermediate node are created to inherit in the right order, all the way 
back to the document itself. From my partial reading of the code, this 
should work even if the naive approach doesn't.

Neither of these works, though. Can someone shed some light on it, or 
let me know if I've found a bug (seems like a common use case)...



John Casey
GitHub -

View raw message