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>

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.