XPath untuk memilih elemen berdasarkan nilai childs child

208

Mencoba memilih elemen berdasarkan nilai salah satu dari anak-anak itu anak-anak

Pikirkan hal-hal berikut tetapi tidak berhasil, hargai bantuan apa pun, terima kasih

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

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

Ingin semua buku yang nama pengarangnya = 'John'

File 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
sumber

Jawaban:

300

Hampir sampai. Dalam predikat Anda, Anda menginginkan jalur relatif , jadi ubah

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

untuk salah satu

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

atau

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

dan Anda akan mencocokkan elemen Anda. Predikat Anda saat ini kembali ke akar dokumen untuk mencari author.

AakashM
sumber
1
Tanpa .tidak bekerja untuk saya (diperlukan ./author/name)
MichaelChirico
Apakah mungkin untuk menggunakan sintaks ini dalam suatu fungsi? Misalnya, bagaimana cara mengimplementasikan sesuatu seperti ./book[contains(author/name, "John")]?
Baru belajar
1
@OgrishMan pertanyaan baru harus masuk dalam Pertanyaan Baru , tetapi sebelum itu saya baru saja mencobanya! Secara umum, Anda menginginkan tanda kutip tunggal 'daripada tanda kutip ganda "untuk string literal di xpath.
AakashM