Altova Mailing List Archives>Archive Index >comp.text.xml Archive Home >Recent entries >Thread Prev - Re: xpath descendant question [Thread Next] Re: xpath descendant questionTo: NULL Date: 2/7/2009 3:16:00 PM CAFxX wrote: > I found just a minor error in your code, it should be > > //*[contains(child::text(),'Y')]/ancestor::a[1] > > and not > > //*[contains(.,'Y')]/ancestor::a[1] > > right? In some circumstances...it depends on what other markup is in your real-life document. If you want to find all a elements which have a Y in any element within them, regardless of how deep, then my example is correct, because <a><b>Y</b></a> contains Y somewhere in it.But the same is then true of your outer a as well, because <a><b>X</b><a><c><b>Y</b></c></a></a> contains XY, which contains a Y. If what you really want is the a ancestor of all b elements that directly contain Y, then you need to specify that: //b[contains(text(),'Y')]/ancestor::a[1] This will return your nested a element rather than both a elements. ///Peter -- XML FAQ: http://xml.silmaril.ie/ > Peter Flynn ha scritto: >> CAFxX wrote: >>> Hi everybody, I have a problem with a xpath query. >>> Suppose you have something like this: >>> >>> <a> >>> <b>X</b> >>> <a> >>> <c> >>> <b>Y</b> >>> </c> >>> </a> >>> </a> >>> >>> Right now to obtain a list of <a> containg a certain token I do: >>> >>> //a[ contains( descendant-or-self::*, 'token' ) ] >>> >>> the problem is that, in the case above, searching for the token Y >>> would give both <a>s, whereas I need only the innermost one (i.e. the >>> nearest <a> ancestor of the fragment containing the searched token). >>> How can I translate this in xpath? >> >> //*[contains(.,'Y')]/ancestor::a[1] >> >> ///Peter | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
