XPath pour sélectionner l'élément en fonction de la valeur enfant de l'enfant

208

Essayer de sélectionner un élément en fonction de la valeur de l'un de ses enfants

Pensant ce qui suit mais ne fonctionne pas, appréciez toute aide, merci

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

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

Vous voulez tous les livres où le nom de l'auteur = 'John'

Fichier 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
la source

Réponses:

300

Presque là. Dans votre prédicat, vous voulez un chemin relatif , alors changez

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

soit

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

ou

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

et vous assortirez votre élément. Votre prédicat actuel remonte à la racine du document pour rechercher un author.

AakashM
la source
1
Sans .n'a pas fonctionné pour moi (nécessaire ./author/name)
MichaelChirico
Est-il possible d'utiliser cette syntaxe dans une fonction? Par exemple, comment mettre en œuvre quelque chose comme ./book[contains(author/name, "John")]?
Juste un apprenant du
1
@OgrishMan les nouvelles questions devraient aller dans Nouvelle question , mais avant cela, je l'essayerais! En général, vous voulez des guillemets simples 'plutôt que des guillemets doubles "pour les littéraux de chaîne dans xpath, soit dit en passant.
AakashM