XPath para seleccionar un elemento basado en el valor hijo

208

Intentando seleccionar un elemento basado en el valor de uno de sus hijos

Pensando lo siguiente pero no funciona, agradezco cualquier ayuda, gracias

./book[/author/name = 'John'] o

./book[/author/name text() = 'John']

Quiere todos los libros donde el autor nombre = 'John'

Archivo xml

<list>
   <book>
      <author>
         <name>John</name>
         <number>4324234</number>
      </author>
      <title>New Book</title>
      <isbn>dsdaassda</isbn>
   </book>
   <book>...</book>
   <book>...</book>
</list>
James Walsh
fuente

Respuestas:

300

Casi ahí. En tu predicado, quieres una ruta relativa , así que cambia

./book[/author/name = 'John'] 

a cualquiera

./book[author/name = 'John'] 

o

./book[./author/name = 'John'] 

y combinarás tu elemento. Su predicado actual vuelve a la raíz del documento para buscar un author.

AakashM
fuente
1
Sin .no funcionó para mí (necesario ./author/name)
MichaelChirico
¿Es posible usar esta sintaxis en una función? Por ejemplo, ¿cómo implementar algo como ./book[contains(author/name, "John")]?
Solo aprendiz
1
Las nuevas preguntas de @OgrishMan deberían ir en Nueva pregunta , ¡pero antes de eso solo lo probaría! Por lo general, desea comillas simples en 'lugar de comillas dobles "para literales de cadena en xpath, por cierto.
AakashM