XPath para selecionar o elemento com base no valor filho de childs

208

Tentando selecionar um elemento com base no valor de uma das crianças

Pensando o seguinte, mas não funcionando, agradeço qualquer ajuda, obrigado

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

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

Deseja todos os livros em que o autor name = 'John'

Arquivo 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
fonte

Respostas:

300

Quase lá. No seu predicado, você quer um caminho relativo , então mude

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

para qualquer um

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

ou

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

e você combinará seu elemento. Seu predicado atual volta à raiz do documento para procurar um author.

AakashM
fonte
1
Sem .não funcionou para mim (necessário ./author/name)
MichaelChirico
É possível usar esta sintaxe em uma função? Por exemplo, como implementar algo como ./book[contains(author/name, "John")]?
Apenas um aluno
1
@OgrishMan novas perguntas devem entrar em Nova Pergunta , mas antes disso eu apenas tentava! Geralmente, você quer aspas simples, em 'vez de aspas duplas "para literais de string no xpath, a propósito.
AakashM