Hi Alvaro,
as per XPath specification [1] your query will be expanded to:
/descendant-or-self::node()/myTopNode/descendant-or-self::node()/*
which will effectively match only descendant nodes of /myTopNode
what you are probably looking for is:
//myTopNode/descendant-or-self::node()
but this is currently not supported by jackrabbit because it is not
required by the JCR spec.
regards
marcel
[1] http://www.w3.org/TR/xpath20/#abbrev
Alvaro Gonzalez wrote:
Hi list,
I have been doing some tests with "//" (descendant-or-self) axis, and i
think is not interpreted correctly by Jacrabbit Query Builder.
A query with this axis returns only "descendant" nodes instead of
"descendant-or-self" nodes. For example with this piece of code:
Node myTopNode =
rootNode.addNode("myTopNode");
myTopNode.addNode("subNode");
myTopNode.addNode("subNode"); rootNode.save();
String query = "//myTopNode//*";
//Should find all the 3 nodes: myTopNode and 2 subnodes.
QueryManager qm = currentSession.getWorkspace().getQueryManager();
Query q = qm.createQuery(query, Query.XPATH);
QueryResult qr = q.execute();
NodeIterator nodes = qr.getNodes();
assertEquals(3, nodes.getSize());
the test fails because it only finds two nodes instead of three. Is this
a bug? Am I misunderstanding "//" axis?
Regards,
Alvaro