2011-01-06 2 views
6

Ho problemi a restituire un elemento usando xpath. Ho bisogno di ottenere il testo dal 2 ° TD da un grande tavolo.xpath elemento più vicino ad un dato elemento

<tr> 
<td> 
    <label for="PropertyA">Some text here </label> 
</td> 
<td> TEXT!! </td> 
</tr> 

sono in grado di trovare l'elemento etichetta, ma poi sto avendo problemi a selezionare il TD fratello di restituire il testo.

Questo è come seleziono l'etichetta:

"//label[@for='PropertyA']" 

grazie

risposta

16

Stai cercando gli assi following-sibling. Cerca tra i fratelli dello stesso genitore - lì è tr. Se gli td s non si trovano nello stesso tr, non vengono trovati. Se lo desideri, puoi utilizzare gli assi following.

//td[label[@for='PropertyA']]/following-sibling::td[1] 
+0

ha funzionato alla grande, molte grazie – nologo

+0

+1 per usare 'following-sibling' invece di' following'. Il primo è un metodo più robusto: meno probabilità di sbagliare, ad es. se non c'è il seguente-tibling :: td non selezionerà il td sbagliato. – LarsH

6

Dal elemento label, dovrebbe essere:

//label[@for='PropertyA']/following::td[1] 

e quindi utilizzare il metodo DOM dalla lingua di hosting per ottenere il valore di stringa.

Oppure selezionare il nodo di testo (cosa che non consiglio) con:

//label[@for='PropertyA']/following::td[1]/text() 

O se non ci sara 'solo questo unico nodo, allora si potrebbe utilizzare la funzione string():

string(//label[@for='PropertyA']/following::td[1]) 

È anche possibile scegliere tra l'antenato comune tr come:

//tr[td/label/@for='PropertyA']/td[2] 
+0

+1. Risposta esaustiva – Flack

0

ottenere qualsiasi seguente elemento:

// td [etichetta [@ per = 'PropertyA']]/dopo-sibling :: *