2011-01-05 29 views

Respuesta

60

Use:

ExpressionSelectingTable/tr[td//text()[contains(., 'targetString')]] 

Esto significa:

selecciona Cada tr que es un niño de cualquier tabla seleccionada por la expresión ExpressionSelectingTable y que (la tr) tiene al menos un td niño que tiene al menos un descendiente texto-nodo que contiene la cadena de 'targetString'

+0

+1 Respuesta correcta. –

+4

Creo que podría querer 'ExpressionSelectingTable // tr [...]', ya que las filas podrían ser hijos de 'thead',' tbody', y/o 'tfoot'. – Phrogz

+2

@Phrogz: Sí, esta es una buena observación, gracias. Mi html está un poco oxidado ... Hice esto a propósito, porque puede haber una tabla dentro de la mesa y no quería seleccionar la tabla externa ... –

11

Para seleccionar filas con celdas que contienen un texto puede utilizar esta expresión XPath:

//tr/td[normalize-space(text())="Banana"]/..

Esto selecciona cualquier td que contiene el texto "Banana" y luego selecciona el padre con /..

+0

Esto no responde a la pregunta: lo que debe seleccionarse son las filas que tienen celdas que contienen Banana. Su respuesta no selecciona un tr'con un solo 'td' que tenga el valor de 'Manzanas y un plátano' –

+0

Además, no es un buen estilo llegar a un nodo determinado y luego volver a subir, en la mayoría de los casos un equivalente Existe una expresión que usa solo ejes hacia delante. –

+0

Aunque la pregunta solicitó una consulta "contiene", me complace ver este consejo sobre el uso de "normalize_space" cuando desea que el texto coincida exactamente excepto en el espacio en blanco. –

Cuestiones relacionadas