[Megoldva] XPath kerdes - az elso reszfa parentje

Sziasztok!

Van egy HTML kodom DOM-ban, ennek egy reszfajahoz keresek megfelelo XPath kifejezest. A HTML-t nem tudom modositani, az adott.
A szerkezete valahogy igy nez ki leegyszerusitve:


...
<tr ez_az_ami_kell_nekem>
  <td tulajdonsag="jo"/>
  <td />
  <td />
  <td tulajdonsag="jo"/>
  <td tulajdonsag="jo"/>
</tr ez_az_ami_kell_nekem>
...
<tr ez_az_ami_NEM_kell_nekem>
  <td tulajdonsag="jo"/>
  <td />
  <td tulajdonsag="jo"/>
  <td />
  <td tulajdonsag="jo"/>
</tr ez_az_ami_NEM_kell_nekem>
...

Szoval van a kodban ket helyen (nem is feltetlenul azonos szinten) egy-egy hasonlo szerkezetu reszfa.
A reszfat onnan ismerem fel, hogy nehany child-janak van egy jol felismerheto attributuma (nem mindnek), de ez sajnos a masodikra is illeszkedik. Nekem csak az elso ilyen fa parentje kell (igazabol nem a parent, de onnan mar tovabb tudok menni). Utana tovabb akarok menni a faban lefele, szoval emiatt nem jo megoldas, hogy lekerem az osszeset, es veszem az elsot a nem-xpath kodbol.

Ez az XPath megadja a parenteket (a rosszat is)
.... //td[@tulajdonsag='jo']/..
Ez viszont nem mukodik (pedig mondjuk a td[13] helyes):
.... //td[@tulajdonsag='jo']/..[1]

Tudnatok segiteni ebben?

szerk:
a megoldas a zarojelezes, hogy a halmazbol vegye az elsot: (ld. 1. komment)
(xpath)[1]
(.... //td[@tulajdonsag='jo']/..)[1]

Hozzászólások

A második példa jó lesz szerintem, csak (máshogy) zárójelezd:

(//td[@tulajdonsag='jo']/..)[1]

Ebben a formában először képezi az összes illeszkedő szülőcsomópont halmazát, majd abból választja az elsőt, míg az általad írt formában mindig egy adott szülőcsomópontra értelmezi a [position()=1] predikátumot (ami feltételezésem szerint visszaadja magát a szülőt, vagyis mintha ott sem lenne a predikátum), majd ezek halmazát képezi.

A másik megoldás, hogy mivel a legelső jó szülő kell neked, azért nyilván a legelső jó gyerek szülője kell neked:

(//td[@tulajdonsag='jo'])[1]/..

Késztetést érzek ezt még így átírni:

//td[@tulajdonsag='jo'][1]/..

Mivel a második predikátum csak akkor kezd szűrni, amikor az első predikátum már végzett.

http://www.w3.org/TR/xpath#section-Location-Steps

Koszonom, erre gondoltam, ezt a zarojeles trukkot nem ismertem (azt hittem kulon fuggvenyt kell keresnem).
Esetleg - ha mar szoba kerult, hogy 2 megoldas is van - melyik lehet a hatekonyabb? Venni a parentek kozul az 1-es indexut, vagy venni az elso gyerek szulojet?

(mondjuk a masodik altalanossagban nem jo, mert mashol epp a 2. parent fog kelleni)
--
"Digital content is not a tangible good and should not be subject to the same liability rules as toasters." - Francisco Mingorance, BSA

Botrányosan naivan értelmezve:

A. (//td[@tulajdonsag='jo']/..)[1] -- Mind a K db jó cellának kiválasztjuk a szülőjét (bár aztán az utolsó K-1-et eldobjuk).

B. //td[@tulajdonsag='jo'][1]/.. -- Itt csak az első jó cellának választjuk ki a szülőjét, tehát ez tűnik gyorsabbnak.

De ha az XPath értelmező nem naiv, hanem okos, akkor akármi is lehet.