Dengan XML ini, XPath mengembalikan semua elemen yang prop
atributnya berisi Foo
(tiga node pertama):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Dengan XML ini, XPath mengembalikan semua elemen yang prop
atributnya berisi Foo
(tiga node pertama):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Jawaban:
//a[contains(@prop,'Foo')]
Bekerja jika saya menggunakan XML ini untuk mendapatkan hasil kembali.
<bla>
<a prop="Foo1">a</a>
<a prop="Foo2">b</a>
<a prop="3Foo">c</a>
<a prop="Bar">a</a>
</bla>
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. :)
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:
//attribute::*[contains(., 'Foo')]/..
Tentu saja, jika Anda lebih tertarik pada isi dari atribut itu sendiri, dan belum tentu simpul induknya, cukup taruh / ..
//attribute::*[contains(., 'Foo')]
//@*[contains(., 'Foo')]
descendant-or-self::*[contains(@prop,'Foo')]
Atau:
/bla/a[contains(@prop,'Foo')]
Atau:
/bla/a[position() <= 3]
Dibedah:
descendant-or-self::
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 ().
John C adalah yang terdekat, tetapi XPath peka huruf besar-kecil, jadi XPath yang benar adalah:
/bla/a[contains(@prop, 'Foo')]
Sudahkah Anda mencoba sesuatu seperti:
// a [berisi (@prop, "Foo")]
Saya tidak pernah menggunakan fungsi berisi sebelumnya tetapi menduga itu harus berfungsi seperti yang diiklankan ...
Jika Anda juga harus mencocokkan konten tautan itu sendiri, gunakan teks ():
//a[contains(@href,"/some_link")][text()="Click here"]
/ bla / a [berisi (@prop, "foo")]
coba ini:
// a [berisi (@ prop, 'foo')]
yang seharusnya berfungsi untuk tag "a" apa pun dalam dokumen