Mengapa semua orang melihat atribut "prop"? Apakah saya melewatkan sesuatu? Itu hanya mengatakan dapatkan tiga node pertama.
6
Semua orang melihat atribut prop karena itu yang diminta. Dapatkan semua simpul di mana prop berisi "Foo". Tambahkan <a prop="Foo5" /> dan Anda akan melihat mengapa itu bukan hanya "tiga node pertama" ..
erlando
Pertanyaan di dalam tubuh adalah kata-kata yang buruk, terlepas dari judulnya. Bisakah foo benar-benar berada dalam atribut prop, atau apakah Anda serius hanya ingin tiga node pertama?
3
Ya, silakan merujuk ke judulnya (dan silakan diedit).
Sunting: Hal lain yang perlu diperhatikan adalah bahwa sementara XPath di atas akan mengembalikan jawaban yang benar untuk xml tertentu, jika Anda ingin menjamin Anda hanya mendapatkan "a" elemen dalam elemen "bla", Anda harus seperti yang disebutkan orang lain juga menggunakan
/bla/a[contains(@prop,'Foo')]
Ini akan mencari Anda semua "a" elemen di seluruh dokumen xml Anda, terlepas dari yang bersarang di elemen "bla"
//a[contains(@prop,'Foo')]
Saya menambahkan ini demi ketelitian dan semangat stackoverflow. :)
Sumbu - cari melalui setiap simpul di bawahnya dan simpul itu sendiri. Sering kali lebih baik mengatakan ini daripada //. Saya telah menemui beberapa implementasi di mana // berarti di mana saja (decendant atau self of the root node). Yang lainnya menggunakan sumbu default.
* or /bla/a
Tag - pencocokan wildcard, dan / bla / a adalah jalur absolut.
[contains(@prop,'Foo')] or [position() <= 3]
Kondisi dalam []. @prop adalah singkatan untuk atribut :: prop, karena atribut adalah sumbu pencarian lain. Atau Anda dapat memilih 3 pertama dengan menggunakan fungsi posisi ().
Jawaban:
Bekerja jika saya menggunakan XML ini untuk mendapatkan hasil kembali.
Sunting: Hal lain yang perlu diperhatikan adalah bahwa sementara XPath di atas akan mengembalikan jawaban yang benar untuk xml tertentu, jika Anda ingin menjamin Anda hanya mendapatkan "a" elemen dalam elemen "bla", Anda harus seperti yang disebutkan orang lain juga menggunakan
Ini akan mencari Anda semua "a" elemen di seluruh dokumen xml Anda, terlepas dari yang bersarang di elemen "bla"
Saya menambahkan ini demi ketelitian dan semangat stackoverflow. :)
sumber
xmlme.com
sekarang dialihkan ke beberapa host lain dan tampaknya tidak meng-host alat atau yang sejenisnya.XPath ini akan memberi Anda semua node yang memiliki atribut yang mengandung 'Foo' terlepas dari nama simpul atau nama atribut:
Tentu saja, jika Anda lebih tertarik pada isi dari atribut itu sendiri, dan belum tentu simpul induknya, cukup taruh / ..
sumber
//@*[contains(., 'Foo')]
Atau:
Atau:
Dibedah:
Sumbu - cari melalui setiap simpul di bawahnya dan simpul itu sendiri. Sering kali lebih baik mengatakan ini daripada //. Saya telah menemui beberapa implementasi di mana // berarti di mana saja (decendant atau self of the root node). Yang lainnya menggunakan sumbu default.
Tag - pencocokan wildcard, dan / bla / a adalah jalur absolut.
Kondisi dalam []. @prop adalah singkatan untuk atribut :: prop, karena atribut adalah sumbu pencarian lain. Atau Anda dapat memilih 3 pertama dengan menggunakan fungsi posisi ().
sumber
John C adalah yang terdekat, tetapi XPath peka huruf besar-kecil, jadi XPath yang benar adalah:
sumber
Sudahkah Anda mencoba sesuatu seperti:
// a [berisi (@prop, "Foo")]
Saya tidak pernah menggunakan fungsi berisi sebelumnya tetapi menduga itu harus berfungsi seperti yang diiklankan ...
sumber
Jika Anda juga harus mencocokkan konten tautan itu sendiri, gunakan teks ():
//a[contains(@href,"/some_link")][text()="Click here"]
sumber
/ bla / a [berisi (@prop, "foo")]
sumber
Untuk kode di atas ... // * [berisi (@ prop, 'foo')]
sumber
coba ini:
// a [berisi (@ prop, 'foo')]
yang seharusnya berfungsi untuk tag "a" apa pun dalam dokumen
sumber