2011-01-06 7 views
6

Tengo problemas para devolver un elemento con xpath. Necesito obtener el texto del segundo TD de una mesa grande.xpath elemento más cercano a un elemento determinado

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

soy capaz de encontrar el elemento de etiqueta, pero tengo problemas para seleccionar el TD hermanos devolver el texto.

Ésta es la forma en que seleccione la etiqueta:

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

gracias

Respuesta

16

Está buscando los ejes following-sibling. Busca en los hermanos del mismo padre, allí está tr. Si los td s no están en el mismo tr, entonces no se encuentran. Si lo desea, puede usar los ejes following.

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

esto funcionó muy bien, muchas gracias – nologo

+0

+1 por usar 'following-sibling' en lugar de' following'. El primero es un método más sólido, es menos probable que vaya mal, p. si no hay following-sibling :: td, no seleccionará la td incorrecta. – LarsH

6

Desde el elemento label, debería ser:

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

y luego usar el método DOM de la lengua de alojamiento para obtener el valor de la cadena

O seleccione el nodo de texto (algo que no recomiendo) con:

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

O si no va a ser sólo éste sólo nodo, entonces se podría utilizar la función string():

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

también puede seleccionar desde el ancestro común tr como:

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

1. Respuesta exhaustiva. – Flack

0

conseguir cualquier siguiente elemento:

// td [etiqueta [@ para = 'propertyâ']]/siguiente-sibling :: *

Cuestiones relacionadas