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]
- 780 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni