XPath для выбора элемента на основе дочернего значения childs

208

Попытка выбрать элемент на основе значения одного из его дочерних элементов.

Думая следующее, но не работает, благодарю за любую помощь, спасибо

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

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

Нужны все книги, где имя автора = "Джон"

XML-файл

<list>
   <book>
      <author>
         <name>John</name>
         <number>4324234</number>
      </author>
      <title>New Book</title>
      <isbn>dsdaassda</isbn>
   </book>
   <book>...</book>
   <book>...</book>
</list>
Джеймс Уолш
источник

Ответы:

300

Почти готово. В вашем предикате вы хотите относительный путь, поэтому измените

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

либо

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

или

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

и вы будете соответствовать своей стихии. Ваш текущий предикат возвращается в корень документа для поиска author.

AakashM
источник
1
Без .меня не сработало (нужно ./author/name)
MichaelChirico
Можно ли использовать этот синтаксис в функции? Например, как реализовать что-то вроде ./book[contains(author/name, "John")]?
Просто ученик
1
@OgrishMan новые вопросы должны идти в новый вопрос , но до этого я просто попробую! Кстати, обычно вы хотите использовать одинарные кавычки, 'а не двойные "для строковых литералов в xpath.
AakashM