On Wed, Dec 1, 2010 at 2:47 PM, Nicolas Betheuil
<[email protected]> wrote:
> Hi,
>
> Only to tell you where i'm gone because i ever try this
> http://dev.day.com/discussion-groups/content/lists/jackrabbit-users/2010-11/2010-11-23_Re_xpath_query_of_subnode_Alexander_Klimetschek.html
>
> You will not succeed to do what you want. The xpath implementation is very 
> far to be exaustive as all the documentation tell it. Think about going back 
> to whiteboard to try to find a workaround to your problem.
>
> The conditions (between []) can only test properties on same node, not child 
> nodes even is sql2.

What makes you think this is the case? Are you referring to some JR version?

child conditions are supported within the where [] clause. Only
fn:name() which you should use for nodename clauses, does not seem to
work in child where clauses.

I am however not sure what the query below would need to return:

//element(*,mynode)[child/grandchild/@name!='grandchild2' and @property='test']

I think the query is very confusing. Imo, for child predicates you
should try to avoid != . I think not many developers know the subtle
difference between != and not() : It is *very* different when handling
multi valued properties. The != is not very intuitive then. Same holds
imo for child queries.

You can try:

//element(*,mynode)[not(child/grandchild/@name = 'grandchild2') and
@property='test']

I assume now 'name' is a property of the grandchild node.

Otherwise, and I agree with Nicolas, you should reconsider you content model.

Regards Ard

>
> -----Message d'origine-----
> De : Stefan Hagedorn [mailto:[email protected]]
> Envoyé : mercredi 1 décembre 2010 14:39
> À : [email protected]
> Objet : XPath query: check if child-node does not exist
>
> Hi,
>
> I am trying to build a XPath query that gets all nodes that do not have
> a certain (grand)child node but do have a property with a certain value
>
> example
>
> node1 (property=test)
>  + child
>     + grandchild1
>     + grandchild2
>
>
> node2 (property=test)
>  + child
>     + grandchild1
>
>
> With my query I would like to find all nodes ("nodeX") that do not have
> a grandchild "grandchild2" but do have a property "property" with value
> "test".
>
> i.e. in the example above I would like the query to return node2 (since
> node1 has a grandchild "grandchild2".
>
> It doesn't matter to me if "grandchildX" is the name of the
> grandchild-node, or if it was in an extra name-property of the grandchild.
>
> I tried with the grandchild names as a property (all grandchildren have
> the same node name) and have the following sample:
> //element(*,mynode)[child/grandchild/@name!='grandchild2' and
> @property='test']
>
> But this also returns node1 as this has a granchild which is not
> grandchild2 ...
>
>
> Is this possible with Jackrabbit/XPath and could someone please show me
> how? ;)
>
> Thanks in advance,
> Stefan
>



-- 
Hippo
Europe  •  Amsterdam  Oosteinde 11  •  1017 WT Amsterdam  •  +31 (0)20 522 4466
Hippo USA Inc  • 755 Baywood Drive  • Second Floor  • Petaluma, CA  •
94954 USA  • Phone +1 (707) 658-4535
Canada    •   Montréal  5369 Boulevard St-Laurent  •  Montréal QC H2T
1S5  •  +1 (514) 316 8966
www.onehippo.com  •  www.onehippo.org  •  [email protected]

Reply via email to