XPath bookstore/book[1]
memilih simpul buku pertama di bawah bookstore
.
Bagaimana saya bisa memilih simpul pertama yang cocok dengan kondisi yang lebih rumit, misal simpul pertama yang cocok /bookstore/book[@location='US']
Menggunakan:
(/bookstore/book[@location='US'])[1]
Ini pertama-tama akan mendapatkan elemen buku dengan atribut lokasi sama dengan 'AS'. Kemudian akan memilih simpul pertama dari set itu. Perhatikan penggunaan tanda kurung, yang diperlukan oleh beberapa implementasi.
Catatan, ini tidak sama dengan /bookstore/book[1][@location='US']
kecuali elemen pertama juga memiliki atribut lokasi tersebut.
/bookstore/book[@location='US'][1]
tidak mengembalikan semua buku dari 'AS'. Saya telah mengujinya berkali-kali dan di bawah implementasi xpath bahasa yang berbeda./bookstore/book[@location='US'][1]
mengembalikan buku 'AS' pertama di bawah toko buku. Jika ada toko buku mutiple, maka itu akan mengembalikan yang pertama dari masing-masing. Inilah yang diminta OP (simpul pertama di bawah toko buku). Versi Anda hanya mengembalikan satu buku dari semua toko buku (pertandingan pertama)./bookstore/book[@location='US'][1]
hanya bekerja dengan struktur sederhana.Tambahkan sedikit lebih banyak struktur dan hal-hal istirahat.
Dengan
/bookstore/category/book[@location='US'][1]
hasil panenbukan "simpul pertama yang cocok dengan kondisi yang lebih rumit".
/bookstore/category/book[@location='US'][2]
tidak mengembalikan apa pun.Dengan tanda kurung Anda bisa mendapatkan hasil pertanyaan awal untuk:
(/bookstore/category/book[@location='US'])[1]
memberidan
(/bookstore/category/book[@location='US'])[2]
bekerja seperti yang diharapkan.sumber
/bookstore/book[1]
dan TIDAK(/bookstore/book)[1]
. Kasing yang Anda berikan tidak sama dengan yang diminta OP. Agaknya, OP menerima jawaban saya karena melakukan apa yang dia harapkan (dan minta).'(//div[text() = "'+ name +'"])[1]/following-sibling::*/div/text()'
. Jika ada banyak node yang cocokname
.Sebagai penjelasan atas jawaban Jonathan Fingland:
[position()=1 and @location='US']
) harus benar secara keseluruhan[position()=1][@location='US']
) harus benar satu demi satu[position()=1][@location='US']
! =[@location='US'][position()=1]
sementara
[position()=1 and @location='US']
==[@location='US' and position()=1]
[position()=1]
dapat disingkat menjadi[1]
Anda dapat membangun ekspresi kompleks dalam predikat dengan operator Boolean "
and
" dan "or
", dan dengan fungsi XPath Booleannot()
,true()
danfalse()
. Plus Anda dapat membungkus sub-ekspresi dalam tanda kurung.sumber
Cara termudah untuk menemukan simpul buku bahasa Inggris pertama (dalam seluruh dokumen), dengan mempertimbangkan file xml yang terstruktur, seperti:
adalah ekspresi xpath:
sumber
Jadi Mengingat hal di atas; Anda dapat memilih buku pertama dengan
Dan ini akan menemukan yang pertama di mana saja yang memiliki lokasi AS. [A1]
Akan mengembalikan set simpul dengan semua buku dengan lokasi AS. [A1, B1, C2]
Akan mengembalikan lokasi buku pertama AS yang ada dalam kategori di mana saja dalam dokumen. [B1]
akan mengembalikan buku pertama dengan lokasi AS yang ada di mana saja di bawah toko buku elemen root; membuat bagian toko buku benar-benar berlebihan. [A1]
Dalam jawaban langsung:
Akan mengembalikan Anda simpul pertama untuk elemen buku dengan lokasi AS yang berada di bawah toko buku [A1]
Kebetulan jika Anda mau, dalam contoh ini untuk menemukan buku AS pertama yang bukan anak langsung dari toko buku:
sumber
Gunakan indeks untuk mendapatkan simpul yang diinginkan jika xpath rumit atau lebih dari satu simpul hadir dengan xpath yang sama.
Mis:
Anda dapat memberikan nomor simpul mana yang Anda inginkan.
sumber
jika namespace disediakan pada xml yang diberikan, lebih baik menggunakan ini.
sumber
misalnya
Dan
sumber
Dengan bantuan tester xpath online, saya menulis jawaban ini ...
Untuk ini:
xpath berikut:
output:
Karena 1 berarti memilih semua elemen td yang merupakan anak pertama dari orang tua langsung mereka sendiri.
Tetapi xpath berikut:
output:
sumber