2009-05-14 31 views
13

Conozco el valor parcial de un atributo en un documento, pero no el todo. ¿Hay algún personaje que pueda usar para representar algún valor? Por ejemplo, un valor de una etiqueta para una entrada es "A. Elección 1". Sé que dice "Opción 1", pero no si va a decir "A" o "B" antes de la "Opción 1". A continuación se muestra el HTML relevante. Hay otros atributos para la entrada y la etiqueta, pero no son lo mismo cada vez que la página se representa, por lo que no pueden utilizarlos como referencias:XPath parcial del atributo conocido

<tr> 
<td><input type="checkbox" /><label>A. Choice 1</label></td> 
</tr><tr> 
    <td><input type="checkbox" /><label>B. Choice 2</label></td> 
</tr><tr> 
<td><input type="checkbox" /><label>C. Choice 3</label></td> 
</tr><tr> 
    <td><input type="checkbox" /><label>D. Choice 4</label></td> 
</tr> 

Esta es la expresión XPath estoy usando para seleccionar la entrada junto a la etiqueta con el valor de "Opción 1", excepto que el a está en frente de ella en el código HTML:

//td[label="Choice 1"]/input 

no sé si el a en el código HTML será una A, B o C, etc. Pero sí sé que la entrada correcta siempre tendrá el texto de la Opción 1 al lado. ¿Cómo puedo decir que lo seleccione si la etiqueta contiene Opción 1, en comparación con que es igual a opción 1?

Respuesta

27

Su expresión XPath debe tener este aspecto:

//td[contains(@label, 'Choice 1')]/input 

de seleccionar todos td elementos que tienen una etiqueta que contiene Choice 1 y luego seleccionar los elementos dentro de estos inputtd elementos.

EDIT: El comentario de Tomalak sugiere una mejora para evitar una coincidencia con 'Elección 11' (o 'Elección 12345', ...).

+0

impresionante, gracias. Eso es exactamente lo que necesitaba. – avaleske

+0

También es útil para mí, gracias :) –

+5

No, debería verse como '// td [contains (concat ('', label, ''), 'Choice 1')]/input' o coincidirá con 'Choice 11 '. – Tomalak

4

Encontré la solución de Ronald mientras intentaba encontrar la manera de comprobar si un nodo tiene un atributo 'alinear' que no está vacío O un atributo 'estilo' que contiene el valor de texto 'texto-alinear'. Estos son los 'nodos' en cuestión:

<node> 
    <p>This is left-aligned.</p> 
    <div align="left" >This is aligned LEFT using HTML attribute.</div> 
    <p style="text-align: center;" >This is centered using CSS style attribute.</p> 
    <div align="center" >This is CENTERED.</div> 
    <p style="text-align: right;" >This is right-aligned.</p> 
</this> 

Esta expresión XPath trabajó - gracias a la respuesta de Ronald que me señaló en la dirección correcta:

//*[contains(@style, 'align') or @align!=''] 
Cuestiones relacionadas