XPath, aby wybrać element na podstawie wartości potomnej potomka

208

Próba wybrania elementu na podstawie wartości jednego z jego dzieci dla dzieci

Myśląc o tym, ale nie działa, dziękuję za wszelką pomoc, dzięki

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

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

Chcesz wszystkich książek, których nazwisko autora = „John”

Plik 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
źródło

Odpowiedzi:

300

Prawie na miejscu. W predykacie potrzebujesz ścieżki względnej , więc zmień

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

albo

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

lub

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

i dopasujesz swój element. Twój obecny predykat wraca do katalogu głównego dokumentu w celu wyszukania author.

AakashM
źródło
1
Bez .mnie nie działało (potrzebne ./author/name)
MichaelChirico
Czy można użyć tej składni w funkcji? Np. Jak zaimplementować coś takiego jak ./book[contains(author/name, "John")]?
Tylko uczeń
1
@OgrishMan nowe pytania powinny znaleźć się w nowym pytaniu , ale wcześniej po prostu spróbuję! Nawiasem mówiąc, na ogół chcesz pojedynczych cudzysłowów 'zamiast podwójnych cudzysłowów "dla literałów łańcuchowych w xpath.
AakashM