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>

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.