XPath con múltiples condiciones

157

¿Qué XPath puedo usar para seleccionar cualquier categoría con un atributo de nombre especificado y cualquier autor de nodo secundario con el valor especificado?

He intentado diferentes variaciones de la ruta a continuación sin éxito:

//quotes/category[@name='Sport' and author="James Small"]

El XML:

<?xml version="1.0" encoding="utf-8"?>
<quotes>
  <category name="Sport">
   <author>James Small<quote date="09/02/1985">Quote One</quote><quote             date="11/02/1925">Quote nine</quote></author>
  </category>
   <category name="Music">
   <author>Stephen Swann
 <quote date="04/08/1972">Quote eleven</quote></author>
  </category>
  </quotes>
mjroodt
fuente

Respuestas:

248

Tratar:
//category[@name='Sport' and ./author/text()='James Small']

Cylian
fuente
44
Para los seguidores, el mensaje de error "Esperado], pero encontrado: &&" significaba "usar la palabra clave y en lugar de &&" (como especifica esta respuesta)
rogerdpack
31

Uso :

/category[@name='Sport' and author/text()[1]='James Small']

o usar:

/category[@name='Sport' and author[starts-with(.,'James Small')]]

Es una buena regla tratar de evitar el uso del //pseudo-operador siempre que sea posible, porque su evaluación generalmente puede ser muy lenta.

También:

./somename

es equivalente a:

somename

Por lo tanto, se recomienda utilizar este último.

Dimitre Novatchev
fuente
14

la pregunta no está clara, pero lo que entiendo es que debe seleccionar una categoría que tenga un atributo de nombre y deba tener un autor secundario con un valor especificado, corríjame si estoy trabajando

aquí hay un xpath

//category[@name='Required value'][./author[contains(.,'Required value')]]
e.g
//category[@name='Sport'][./author[contains(.,'James Small')]]
akhter wahab
fuente
1

Puede aplicar múltiples condiciones en xpath usando y, o

//input[@class='_2zrpKA _1dBPDZ' and @type='text']

//input[@class='_2zrpKA _1dBPDZ' or @type='text']
Suman
fuente
-1

Aquí, podemos hacer esto también:

//category [@name='category name']/author[contains(text(),'authorname')]

O

//category [@name='category name']//author[contains(text(),'authorname')]

Para aprender XPATH en detalle, visite- selenium xpath en detalle

Avinash Pande
fuente